电话重启后启动活动或手动关闭或打开电源

时间:2017-03-01 07:21:03

标签: android android-broadcastreceiver

如何在手机重启或手动关闭或开启电源后启动发布活动

  

我试过下面的代码,但它只用于解锁手机,但我也想完成手动启动或重启手机。

下面是代码

application.class

public class MyApplication extends Application {
    public static SharedPreferences preferences;
    public static SharedPreferences.Editor editor;
    public static String PASSWORD = "password";
    public static String IS_SET = "nothing";
    public static String MYPREF = "mypref";
    public String TAG = getClass().getName();

    @Override
    protected void attachBaseContext(Context context) {
        super.attachBaseContext(context);
        MultiDex.install(this);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        init();  
   }

    public void init() {
        preferences = getSharedPreferences(MYPREF, 0);
        editor = preferences.edit();
        startService(new Intent(getBaseContext(), ScreenReceiver.class));

    }
}

ScreenReceiver.class

public class ScreenReceiver extends BroadcastReceiver {
     SharedPreferences preferences;

        @Override
        public void onReceive(Context context, Intent intent) {
            System.out.println(intent.getAction());
            preferences = context.getSharedPreferences(MYPREF, 0);
            if (preferences != null) {
                String lock = preferences.getString(IS_SET, null);
                if (lock != null) {
                    if (lock.equals("passcode")) {
                        gotopasslock(context, intent);

                    } else {
                        gotopatternlock(context, intent);
                    }
                }
            }
        }
        public void gotopasslock(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
                Intent intent1 = new Intent(context, Main.class);
                intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent1);
            } else if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
                Intent myStarterIntent = new Intent(context, Main.class);
                myStarterIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(myStarterIntent);
            }
        }

        public void gotopatternlock(Context context, Intent intent) {

            if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
                Intent intent1 = new Intent(context, PatternLock.class);
                intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent1);
            } else if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
                Intent myStarterIntent = new Intent(context, PatternLock.class);
                myStarterIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(myStarterIntent);
            }
        }
    }

Main.class

public class Main extends AppCompatActivity {
    private PinLockView mPinLockView;
    private IndicatorDots mIndicatorDots;
    private String TAG = getClass().getName();
    String oldPassword = "";
    String newPassword = "";
    SharedPreferences preferences;
    SharedPreferences.Editor editor;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // getSupportActionBar().hide();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_xml);

menifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="">

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />


    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="label">

        <meta-data
            android:name="com.google.android.gms.vision.DEPENDENCIES"
            android:value="face" />

        <activity android:name=".activities.ChooseActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <!--   <category android:name="android.intent.category.HOME" />
                   <category android:name="android.intent.category.DEFAULT" />-->
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".activities.Home" />
        <activity android:name=".activities.MainActivity" />
        <activity
            android:name=".activities.Main"
            android:showOnLockScreen="true" />
        <activity
            android:name=".activities.PatternLock"
            android:showOnLockScreen="true" />

        <!--<receiver
            android:name=".receiver.ScreenReceiver"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

        </receiver>-->
        <receiver
            android:name=".receiver.ScreenReceiver"
            android:label="ScreenReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
            <intent-filter>
                <category android:name="android.intent.category.HOME" />

                <action android:name="android.intent.action.SCREEN_ON" />
                <action android:name="android.intent.action.SCREEN_OFF" />
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

1 个答案:

答案 0 :(得分:0)

缺少意图行动。

要在重新启动后启动Android活动,请添加以下行 的的AndroidManifest.xml

第1步

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

第2步:

<receiver
    android:name=".receiver.ScreenReceiver"
    android:label="ScreenReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.USER_PRESENT"
    </intent-filter>
</receiver>

注意:

尝试进行代码清理