2016-09-20 25 views
0

私のアプリはBOOT_COMPLETEDを聞いて開始します。BOOT_COMPLETEDを聞くアプリを再起動する方法

<receiver android:name=".BootReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" />   
</receiver> 

しかし、私のアプリがクラッシュした場合、どのように私は自動的再起動するようにそれを得ることができますか?

BOOT_COMPLETEDは固定的な意図ではありません。

+1

場合uncaughtException()に入るのだろうか? – androidXP

+0

@androidXPはいです。 – newathens

答えて

0

質問の回答は非常に簡単です。その場合、Thread.setDefaultUncaughtExceptionHandler()を使用する必要があります。それは、常にあなたのアプリケーションcrashed.For Check Full Tutorial Here

public class YourApplication extends Application { 

    private static Context mContext; 

    public static YourApplication instace; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mContext = getApplicationContext(); 
     instace = this; 
    } 

    @Override 
    public Context getApplicationContext() { 
     return super.getApplicationContext(); 
    } 

    public static YourApplication getIntance() { 
     return instace; 
    } 
} 

DefaultExceptionHandler.javaあなたは自動的にクラッシュした後にアプリを再起動する必要があり

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.lang.Thread.UncaughtExceptionHandler; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Environment; 
import android.util.Log; 

/** 
* This custom class is used to handle exception. 
* 
* @author Chintan Rathod (http://www.chintanrathod.com) 
*/ 
public class DefaultExceptionHandler implements UncaughtExceptionHandler { 

    private UncaughtExceptionHandler defaultUEH; 
    Activity activity; 

    public DefaultExceptionHandler(Activity activity) { 
     this.activity = activity; 
    } 

    @Override 
    public void uncaughtException(Thread thread, Throwable ex) { 

     try { 

      Intent intent = new Intent(activity, RelaunchActivity.class); 

      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
        | Intent.FLAG_ACTIVITY_CLEAR_TASK 
        | Intent.FLAG_ACTIVITY_NEW_TASK); 

      PendingIntent pendingIntent = PendingIntent.getActivity(
        YourApplication.getInstance().getBaseContext(), 0, intent, intent.getFlags()); 

         //Following code will restart your application after 2 seconds 
      AlarmManager mgr = (AlarmManager) YourApplication.getInstance().getBaseContext() 
        .getSystemService(Context.ALARM_SERVICE); 
      mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, 
        pendingIntent); 

         //This will finish your activity manually 
      activity.finish(); 

         //This will stop your application and take out from it. 
      System.exit(2); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}