APKが予期せぬエラーで終了 → Android再起動 → APK起動
の処理を作りたかったのですが再起動ではまりました。
対処できたので忘れないようまとめたいと思います。
HogeActivity.java
Intent i = new Intent(this, FugaReciver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
// APKが正常に動作している間はキャンセルとセットを繰り返す
am.cancel(pi);
am.setExact(AlarmManager.RTC_WAKEUP, 5 * 1000, pi);
AndroidManifest.xml
<uses-permission android:name="android.permission.REBOOT" />
<receiver
android:name=".FugaReceiver">
</receiver>
FugaReciver.java
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
pm.reboot(null); // 再起動
}
問題
APKが異常終了した際、「問題が発生したため、●●を終了します」というダイアログが表示されるが、このダイアログをタップするまで再起動が行われない。
アラームマネージャ起動までにダイアログをタップして消しておけば再起動が行われる。
これをダイアログが表示された状態でも、再起動が行われるようにしたい。
また、今回は別APKを利用した再起動はNGです。
解決方法
AndroidManifest.xml
<receiver
android:name=".FugaReceiver"
android:process=":reboot">
</receiver>
同一のプロセスからではなく、レシーバをアプリケーションプロセスから分離することが必要でした。
Manifestに一文定義することで、プロセスの分離が可能です。
これでダイアログが表示されていても、再起動が行われるようになりました。
以上