Android开机自启动应用

Posted 不负韶华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开机自启动应用相关的知识,希望对你有一定的参考价值。

问题场景

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

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

方案:

  • 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;  //H5+SDK

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中启动一次,下次才可以开机启动。

 

原文地址:https://ask.dcloud.net.cn/article/id-689__page-2

 

下面是我写的代码。使用H5+SDK离线打包,在Android一体机中实验成功。

AndroidMainfest.xml完整配置

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 <application
        android:name="io.dcloud.application.DCloudApplication"
        android:allowClearUserData="true"
        android:exported="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:largeHeap="true">

        <activity
            android:name="io.dcloud.PandoraEntry"
            android:configChanges="orientation|keyboardHidden|keyboard|navigation"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:hardwareAccelerated="true"
            android:theme="@style/TranslucentTheme"
            android:screenOrientation="user"
            android:windowSoftInputMode="adjustResize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>
        <!--开机自启动-->
        <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>
</application>

 

以上是关于Android开机自启动应用的主要内容,如果未能解决你的问题,请参考以下文章

Android 开机自启动应用

android 开机自启动

Android应用实现开机自启动的一种较好的方式

android 开机自启动 apk

片段中ListView的android自定义适配器

Android App 开机自启动