android 安卓之开机自启动一个service服务

开机自启动是一方面,保活也是一方面,现在新版本权限是越来越少

隐身任务、图标、保活和自启一直是个争议,当然厂商应用白名单是有特权的

具体看操作,自己领会,我也是半桶水凑了下代码

首先,当然是AndroidMainfest权限声明

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

在AndroidMainfest的application中注册一个广播监听服务

<receiver
            android:name=".BootReceiver"
            android:label="BootReceiver"
            android:exported="false"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
            >
            <intent-filter android:priority="1000">
                <!-- 开机后 -->
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <!-- 开机后 -->
                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
                <!-- 唤醒或解锁屏幕 -->
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                <!-- 用户进入home界面 -->
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.intent.action.PACKAGE_RESTARTED" />
                <action android:name="com.example.dcam.destroy" />
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <!-- SD卡已经成功挂载   -->
                <action android:name="android.intent.action.MEDIA_MOUNTED" />
                <!-- sd卡存在,但还没有挂载   -->
                <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
                <action android:name="android.intent.action.MEDIA_EJECT" />
                <data android:scheme="file" />
            </intent-filter>
        </receiver>

上面注册这么一大堆动作事件,我就说,你怕不怕!~ 够狠不?!

创建一个BootReceiver.java,用于监听广播BroadcastReceiver

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
//保活用的
public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //intent.getAction().equals("android.intent.action.BOOT_COMPLETED")
        //开机
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            toStartYouSevice(context);
        }
        //开机锁屏
        if (Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(intent.getAction())) {
            toStartYouSevice(context);
        }
        //挂载MEDIA
        if (Intent.ACTION_MEDIA_MOUNTED.equals(intent.getAction())) {
            toStartYouSevice(context);
        }
        //进入HOME
        if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {
            toStartYouSevice(context);
        }

    }
    public void toStartYouSevice(Context context){
        //这个你可以改成别的SecretCodeReceiver名称
        Intent serviceIntent = new Intent(context, SecretCodeReceiver.class);
        context.startService(serviceIntent);
    }

    public void toStartYouActivity(Context context){
        Intent dialogIntent = new Intent(context, MainActivity.class);
        dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(dialogIntent);
    }

}

这里演示创建一个通过特殊拨号进入应用的方法,首先在AndroidMainfest声明

<receiver
            android:name=".SecretCodeReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.provider.Telephony.SECRET_CODE" />
                <data android:scheme="android_secret_code" android:host="366303"  />
            </intent-filter>
        </receiver>

通过电话拨号键盘输入*#*#366303#*#*

上面的366303是我家的邮编,你可以改成你自己的生日啊,或者霸气的号码

就可以进入你的APP,这很神奇吧。

创建一个文件SecretCodeReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class SecretCodeReceiver extends BroadcastReceiver {

    public SecretCodeReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent activityIntent = new Intent(context, MainActivity.class);
        activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(activityIntent);
    }
}

本篇文章实现的就是,当你手机开机启动后,自动进入监听服务,

启动拨号监听,当然这里可以换成其它服务,比闹钟保活等等服务

当你拨号输入*#*#366303#*#*后,自动打开你的应用主界面。

我还是有点不放心,于是我在mainActiviry.java的oncreate中又加上了下面这句

ComponentName localComponentName = new ComponentName(getApplicationContext(), BootReceiver.class);
        int i = getApplicationContext().getPackageManager().getComponentEnabledSetting(localComponentName);

好了,简单的作这样的笔记了,以备后用。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注