博客列表 >Android开机自启应用

Android开机自启应用

弘德誉曦的博客
弘德誉曦的博客原创
2019年11月07日 13:08:111910浏览

问题场景

最近开发一个展示类应用项目,展示设备为若干个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为应用程序启动主界面。

  1. <activity android:name=".MainActivity" android:label="@string/app_name">
  2. <intent-filter>
  3. <action android:name="android.intent.action.MAIN" />
  4. <category android:name="android.intent.category.LAUNCHER" />
  5. </intent-filter>
  6. </activity>

到这里解决问题的思路就完整了,我们监听ACTION_BOOT_COMPLETED广播,并在监听逻辑中启动应用的对应的Main Activity。

前提条件

由于我们需要自己写广播接收逻辑,所以应用的打包只能采用“离线打包”,这样我们才能调用android原生的api。

示例

  • 本地离线打包项目导入,环境配置

  • AndroidMainfest.xml中添加开机启动权限

    1. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  • 创建一个广播接收类

  1. package io.dcloud.yourapp;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import io.dcloud.PandoraEntry;
  6. public class BootBroadcastReceiver extends BroadcastReceiver {
  7. static final String action_boot="android.intent.action.BOOT_COMPLETED";
  8. @Override
  9. public void onReceive(Context context, Intent intent) {
  10. if (intent.getAction().equals(action_boot)){
  11. // 注意H5+SDK的Main Activity为PandoraEntry(见AndroidMainfest.xml)
  12. Intent bootMainIntent = new Intent(context, PandoraEntry.class);
  13. // 这里必须为FLAG_ACTIVITY_NEW_TASK
  14. bootMainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  15. context.startActivity(bootMainIntent);
  16. }
  17. }
  18. }
  • 在AndroidMainfest.xml中注册该广播接收类

    1. <!--开机自启动-->
    2. <receiver android:name=".BootBroadcastReceiver">
    3. <intent-filter>
    4. <action android:name="android.intent.action.BOOT_COMPLETED" />
    5. <category android:name="android.intent.category.LAUNCHER"></category>
    6. </intent-filter>
    7. </receiver>
  • 编译,调试

注意事项

  • 请注意BootBroadcastReceiver的命名空间,要保证AndroidMainfest.xml中receiver可以找的到我们创建的BootBroadcastReceiver类。

  • 应用程序必须在Android中启动一次,下次才可以开机启动。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议