重点第一句话:我做的这个app,是面向内部公司客服或销售的,他们的手机我们是可控的。
反正看到百度上各种自启,有效的?都没提到要在手机上去允许程序自启?我反正是干不过系统,接下来上代码。
//AndroidManifest.xml
//头部manifest
<manifest package="com.test.broad"
xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly">
//开启权限
<uses-permission android:name="android.intent.action.BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- 自启动 -->
<receiver
android:name="com.test.broad.broadcast.BootBroadcast"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter >
<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>
<receiver
android:name="com.test.broad.broadcast.AlarmReceiver" >
<intent-filter>
<action android:name="rece.alarm.action" />
</intent-filter>
</receiver>
<service android:name="com.test.service.SelfStartingService"
android:exported="true"
>
</service>
//Broadcast
//解释下:由于自启服务是受系统保护的,由系统发送,包含4.4及以后的系统,我自己注册一个Broadcast Receiver接受广播就行了
static final String action_boot ="android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent mintent) {
if (mintent.getAction().equals(action_boot)) {
// 启动完成
Intent intent = new Intent(context, AlarmReceiver.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction("rece.alarm.action");
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
//领导叫我服务一直开着 隔周期去调
long firstime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// 10秒一个周期,不停的发送广播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,10 * 1000, sender);
}
}
//注意 开机自启俩前提(我是这么做的):1.代码布置好后,运行,去手机开启设置允许app自启
//2.重启手机
//AlarmReceiver
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("rece.alarm.action")) {
Log.d("AlarmReceiv============","进来");
Intent i = new Intent();
//至于service里你要做什么事情,看你需要什么了,就不上传了。
i.setClass(context, SelfStartingService.class);
// 启动service
// 多次调用startService并不会启动多个service 而是会多次调用onStart
context.startService(i);
}
}
//最后实现成了:1.开机自启 2.双击退出app,按下电源键 3.强制性手动(相当于历史记录)划掉app,这个服务都是开启的。(第三方和手机自带强行停止没试过)
我有idea了再更新,先在这里。。