如何知道Android前台服务是由操作系统还是某些用户操作启动的?

时间:2017-11-13 19:19:40

标签: android service foreground-service

无论我的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;
}

1 个答案:

答案 0 :(得分:0)

您可以更具体地检查intent是否包含活动的额外设置,而不是检查intent是否为null。

在您的活动中:

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

在您的服务中:

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

希望这有帮助!