如何重新启动侦听BOOT_COMPLETED的应用程序

时间:2016-09-20 20:36:28

标签: java android bootcompleted

我的应用会听取BOOT_COMPLETED开始。

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

但是如果我的应用崩溃了,我怎么能将它变为自动重启?

BOOT_COMPLETED不是一个棘手的意图。

1 个答案:

答案 0 :(得分:0)

要获得您的问题的答案非常简单。在这种情况下,您需要使用Thread.setDefaultUncaughtExceptionHandler()。如果您的应用程序崩溃,它将始终输入uncaughtException()。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();
        }
    }
}