これがシナリオ…
- アプリが開かれます
- ユーザーは、サービスを開始するボタンをクリックします。
- ユーザーがホーム キーを押してからホーム キーを長押しし、タスク リストからアプリケーションをクリアします。
- アプリは終了しましたが、サービスは引き続き実行されます。
実行中のサービスから、そのアプリが強制終了されたかどうかを判断するにはどうすればよいですか? これは可能ですか?
これがシナリオ…
実行中のサービスから、そのアプリが強制終了されたかどうかを判断するにはどうすればよいですか? これは可能ですか?
私はこれがあなたが探しているものだと思います:
private boolean isAppRunning() {
ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningTaskInfo task : manager.getRunningTasks(Integer.MAX_VALUE)) {
if ("com.example.YourLauncherActivityClassFullName".equals(task.baseActivity.getClassName())) {
return true;
}
}
return false;
}
指定する必要があるのは、アプリの完全なランチャー アクティビティ クラス名だけです。
まず、アクティビティが実行されているかどうかに関係なく、特定の時間を監視するサービスを開始する必要があります。そのため、しばらくしてから Alarm Manager を使用して確認できます。
アクティビティが実行されているかどうかを確認するには、次を使用する必要があります。
ArrayList<String> runningactivities = new ArrayList<String>();
ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (int i1 = 0; i1 < services.size(); i1++) {
runningactivities.add(0,services.get(i1).topActivity.toString());
}
if(runningactivities.contains("ComponentInfo{com.app/com.app.main.MyActivity}")==true){
Toast.makeText(getBaseContext(),"Activity is in foreground, active",1000).show();
}
あなたの主な(最初の)活動では:
public static boolean isRunning;
@オーバーライド
public void onCreate(Bundle savedInstanceState) {
isRunning = true;
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
...
}
@Override
public void finish() {
isRunning = false;
super.finish();
}
サービスのisRunningフラグを確認してください。