2017-11-13 9 views
0

Androidアプリが動作しているか閉じているかにかかわらず、サービスを実行する(最新の場所の更新を取得する)必要があります。AndroidのフォアグラウンドサービスがOSによって起動されたのか、ユーザーの操作によって開始されたのかを知る方法は?

私は最終的にこの目的のために通知ベースのフォアグラウンドサービスを使用しましたが、アプリケーションが閉じられない限り、この仕事はうまくいきます。 アプリがUIまたはバックグラウンドで実行されている場合、サービスは完全に場所を取得します。

  • アプリが終了したとき、つまり最近のアプリからスワップオフされたとき、サービスは何とか再開され、位置情報の更新を取得できません。

ここで、そのサービスがアプリケーションまたはAndroid OSによって開始されているかどうかを確認したいと思います。把握する方法はありますか?

私は次のように試しましたが、サービスによって起動されたときにintentが常にnullであるとは限りません。代わりに、意図がnullの場合、あなたはより具体的にすることができ、目的はあなたの活動によって余分なセットが含まれているかどうかをチェックチェックの

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

答えて

0

。あなたの活動で

:あなたのサービスで

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

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

は、この情報がお役に立てば幸い!

関連する問題