问题场景
最近开发一个展示类应用项目,展示设备为若干个24小时运行的Android广告机。考虑到停电的情况该应用需要开机自启动。
背景知识
-
当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED。
-
android开发中的基本概念:Activity。Activity简单的理解为android的视图,承载着android的人机交互。一个应用程序可以有多个Activity,其中有一个Activity为应用程序启动时最先启动的。 该Activity在AndroidManifest.xml中的具体形式如下。intent-filter中两项android.intent.action.MAIN 和 android.intent.category.LAUNCHER表示该activity为应用程序启动主界面。
<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
到这里解决问题的思路就完整了,我们监听ACTION_BOOT_COMPLETED广播,并在监听逻辑中启动应用的对应的Main Activity。
前提条件
由于我们需要自己写广播接收逻辑,所以应用的打包只能采用“离线打包”,这样我们才能调用android原生的api。
示例
-
本地离线打包项目导入,环境配置。(略,请参考 Android离线打包)
-
AndroidMainfest.xml中添加开机启动权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
-
创建一个广播接收类
package io.dcloud.yourapp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import io.dcloud.PandoraEntry;
public class BootBroadcastReceiver extends BroadcastReceiver {
static final String action_boot="android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(action_boot)){
// 注意H5+SDK的Main Activity为PandoraEntry(见AndroidMainfest.xml)
Intent bootMainIntent = new Intent(context, PandoraEntry.class);
// 这里必须为FLAG_ACTIVITY_NEW_TASK
bootMainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(bootMainIntent);
}
}
}
- 在AndroidMainfest.xml中注册该广播接收类
<!--开机自启动--> <receiver android:name=".BootBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.LAUNCHER"></category> </intent-filter> </receiver>
- 编译,调试
注意事项
-
请注意BootBroadcastReceiver的命名空间,要保证AndroidMainfest.xml中receiver可以找的到我们创建的BootBroadcastReceiver类。
-
应用程序必须在Android中启动一次,下次才可以开机启动。
17 个评论
要回复文章请先登录或注册
湖东呀
1***@qq.com
铁柱
湖东呀
这不是我没有
小毅尔勒
这不是我没有
这不是我没有
Jidea
这不是我没有