1

バックグラウンド サービスでタイマーを実行しています。onReceive() ユーザーによって強制終了された場合にアプリケーションを起動したいアクティビティで受信したインテントをブロードキャストします。そうでなければ、アプリケーションを使い続けたいです。次のコードを使用して、からアプリケーションを再起動していますonReceive()

if(/*Application is killed*/) {
    Intent i = new Intent(context, MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}

ifブロックで使用する条件はどれですか?

4

3 に答える 3

2

受信時にアプリケーションが実行されているかどうかを確認するだけです

コードスニペット

boolean isApplicationRunning = false;
ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
for(int i = 0; i < procInfos.size(); i++){
if(procInfos.get(i).processName.equals("com.me.checkprocess")){
    Log.e("Result", "App is running - Doesn't need to reload");
    isApplicationRunning = true;
    break;
 } 
 else
 {
    Log.e("Result", "App is not running - Needs to reload);
  }
}

そして、実行できます

if(isApplicationRunning) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

}

于 2016-01-11T07:38:08.297 に答える
0

アプリケーションが実行されているかどうかを確認するには、次のことができます。

if(isProcessRunning("package_name")) {
    Intent i = new Intent(context, MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}


public boolean isProcessRunning(String process) {
    ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
    List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
    for(int i = 0; i < procInfos.size(); i++){
        if (procInfos.get(i).processName.equals(process)) {
            return true;
        }  
    }
    return false;
}

これを試してみてください。

アプリケーションに 1 つまたは 2 つのアクティビティしかない場合、またはアプリケーションに BaseActivity が 1 つあり、それが他のアクティビティによって拡張されている場合は、次のようにします。

 public class MyApplication extends Application{
  private static boolean mIsRunning = false;

  public static boolean isRunning(){
    return mIsRunning;
  }
 public void setRunning(boolean isRunning){
   mIsRunning = isRunning;
 }
 }

あなたの活動から:-

public void onCreate(Bundle savedInstanceState){
  MyApplication.setRunning(true);
}

public void onDestroy(){
  MyApplication.setRunning(false);
}

そして、次のように確認できます:-

if(!MyApplication.isRunning()) {
    Intent i = new Intent(context, MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}
于 2016-01-11T06:04:37.893 に答える