开机自启动是一方面,保活也是一方面,现在新版本权限是越来越少
隐身任务、图标、保活和自启一直是个争议,当然厂商应用白名单是有特权的
具体看操作,自己领会,我也是半桶水凑了下代码
首先,当然是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);
好了,简单的作这样的笔记了,以备后用。