我有一个带有前台服务的android应用程序,用于侦听gps位置更新,我仅将LocationManager与gps提供程序一起使用。
我有这段代码:
Intent intent = new Intent(this, LocationUpdateReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
this.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, this.INTERVAL, 0.0f, pi);
我正在通过接收器获取位置更新。屏幕打开时,它可以正常工作,但是当我关闭设备屏幕时,它将停止获取位置更新。它可以在我的redmi 5设备上运行,并且按预期运行。但是我的问题是关于华为的。
注意: this.INTERVAL = 10000; 我正在使用唤醒锁定来防止设备进入休眠状态,如下所示:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG:");
wakeLock.aquire();
我在Manifist.xml中的服务也是这样
<service android:name="com.arttech.services.LocationService" android:enabled="true" />
最后,我正在显示有关前台服务的通知,如下所示:
Notification.Builder ongoing = new Notification.Builder(getBaseContext()).setSmallIcon(R.drawable.logo).setContentTitle("Location Service").setOngoing(true);
if (Build.VERSION.SDK_INT >= 26) {
ongoing.setChannelId("myChannelID");
}
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATIONID, ongoing.build());
有人可以帮助我解决这个问题吗?我奋斗了一个多月,却一无所获。
谢谢
更新:
我也尝试通过电池设置手动将我的应用添加为受保护的应用,但是我得到了相同的行为。我测试了一个名为relive的应用程序,它完美记录了GPS位置。我在做什么错了?
更新: 这是我的OnStartCommand代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("omar","Service Started");
LocationObserver.getInstance().addObserver(this);
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT > 8)
{
Log.d("omar_build",SDK_INT+"");
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
CreateConnectionInstance(); // Connect to socket
startTracking();
isLocationServiceRunning = true;
return START_STICKY;
}
答案 0 :(得分:0)
这可能是由于华为等定制品牌施加了限制。您应该将应用添加到手机白名单中。请检查以下链接How to WhiteList app in Doze mode Android 6.0
更新: 进行这两个更改,然后检查
logging.pattern.console=<custom pattern>
答案 1 :(得分:0)
也许这可以从通用软件中帮助您
https://commonsware.com/blog/2015/11/18/another-doze-edge-case-foreground.html
带有部分WakeLock的前台服务应该阻止打ze模式,大概是着眼于音乐播放器等。但是,Nalevka先生discovered认为,如果具有前台服务的进程也具有前台活动,则打ze模式将再次接管。
Dianne Hackborn建议的解决方法是拆分前景 服务到一个单独的过程中。由于似乎没有 链接到特定的Google+评论的方法,您需要向下滚动 评论列表on this post进行交流。