2016-09-20 56 views
0

我的应用程序收听BOOT_COMPLETED以启动。如何重新启动收听BOOT_COMPLETED的应用程序

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

但如果我的应用程序崩溃,我怎么能得到它的自动重启

BOOT_COMPLETED不是一个粘性的意图。

+1

你需要它的坠毁后自动重新启动应用程序? – androidXP

+0

@androidXP是的,我喜欢。 – newathens

回答

0

得到你的问题的答案很简单。在这种情况下,你需要使用Thread.setDefaultUncaughtExceptionHandler()。它会在情况uncaughtException()始终输入您的应用程序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(); 
     } 
    } 
}