当前位置: 首页 > 知识库问答 >
问题:

huawei mya-L22将应用程序置于后台并关闭屏幕时,GPS位置更新停止更新

蒋胡非
2023-03-14
        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);

注:此间隔=10000;我正在使用wakeLock来防止设备睡眠,如下所示:

    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;
}

共有1个答案

蔺山
2023-03-14

也许这对你有帮助,从commonsware

https://commonsware.com/blog/2015/11/18/thera-doze-edge-case-foreground.html

一个带有部分WakeLock的前台服务应该阻止打瞌睡模式,大概是着眼于音乐播放器之类的东西。然而,Nalevka先生发现,如果具有前台服务的进程也具有前台活动,那么Doze模式将再次接管。

 类似资料:
  • 我的背景粘性服务是杀死奥利奥和更高的设备,任何解决方案,以获得位置的背景服务时,活动是在后台

  • 我试图创建一个Android应用程序,不断记录设备位置数据实时,而设备屏幕关闭。我的代码在Android6.0和更早的版本中工作正常,但似乎Android7.0+破坏了我的应用程序。 我已经实现了一个Android前台服务,它使用wakelock并订阅了Google FusedLocation API。一旦屏幕关闭,回调就永远不会触发。 Android O的代码示例 让应用程序一直在Android

  • 这个问题可能会被问很多次,但我找不到任何解决方案。我需要在后台获取用户的位置15分钟。 打开GPS时它可以正常工作,但关闭GPS时,应用程序不会收到位置更新。我需要它至少获取网络位置或wifi位置。 如何使用融合的位置API实现这一点? Location manager具有此功能,但处于融合位置。因为谷歌建议开发者使用play services API中的Location,所以我不想使用Locat

  • 我试图重新创建Connect四,我成功了。但我想通过频繁地切换颜色,给玩家一个获胜的四张光盘在哪里的指示。我对线程和编程中的时间概念是新的。 我也成功地给了用户这个指示,但是在关闭应用程序之后,控制台仍然会给出输出,也是在使用SetonCloserEquest时。 代码如下:

  • 我正在编写一个应用程序,需要高精度和低频率的背景位置更新。解决方案似乎是一个后台NSTimer任务,它启动location manager的更新,然后立即关闭。这个问题以前有人问过: 如何在iOS应用程序中每n分钟更新一次后台位置? 在应用程序进入后台后每n分钟获取一次用户位置 iOS不是典型的后台位置跟踪计时器问题 iOS长时间运行的后台计时器,具有“位置”后台模式 基于位置跟踪的iOS全职后台

  • 我正在开发一个android应用程序,我需要在后台使用GPS提供商获得更长时间的位置更新,所以当用户不再与它交互时,我需要位置更新。我自己做了一些测试,比较LocationManager的requestSingleUpdate(provider,pendingIntent版本)和requestLocationUpdates(provider,minTime,minDistance,intent版本