Blogger Information
Blog 143
fans 1
comment 0
visits 440315
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Android开机自启应用
弘德誉曦的博客
Original
1908 people have browsed it

问题场景

最近开发一个展示类应用项目,展示设备为若干个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中启动一次,下次才可以开机启动。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post