0

无论我的 Android 应用程序是运行还是关闭,我都需要保持服务运行(获取最新的位置更新)。

为此,我终于使用了基于通知的前台服务,并且它可以很好地完成这项工作,除非并且直到应用程序关闭。所以会发生什么:

  • 当应用程序在 UI 上或后台运行时,服务会完美地获取位置。
  • 当应用程序关闭时,即从最近的应用程序中删除,服务会以某种方式重新启动并且无法获取位置更新。

现在,我想了解该服务是由我的应用程序还是由 Android 操作系统启动的。有什么办法可以弄清楚吗?

我尝试了以下方法,但问题是intent由服务启动时并不总是为空。

public int onStartCommand(Intent intent, int flags, int startId) {

    Log.i(Constants.TAG + this.getClass().getSimpleName(), "Inside onStartCommand");

    if (null == intent) {

        Log.w(Constants.TAG, "Service was stopped and automatically restarted by the system.");
        BackgroundTaskHandler.startLocationMonitorServiceBySelf(this, 20 * 1000); // start after 20 sec
        Log.w(Constants.TAG, "Stopped self. Restarting again via alarm.");
        stopSelf();

    } else {
        // Other piece of code to setup location client 
        // and configure notification intent
    }

    return START_STICKY;
}
4

1 回答 1

0

您可以更具体地检查意图是否包含您的活动设置的额外集合,而不是检查意图是否为空。

在您的活动中:

Intent intent = new Intent(mContext, YourService.class);
intent.putExtra("IntentFlag", "MainActivity");

在您的服务中:

if (intent.getStringExtra("IntentFlag").equals("MainActivity"))
{
    //Service started by activity
}

希望这可以帮助!

于 2017-11-13T21:09:24.020 回答