• 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>
  • 相关阅读:
    [NOIP2011] 玛雅游戏
    [bzoj4025] 二分图
    [10.2模拟] tree
    [10.3模拟] color
    [10.2模拟] teach
    [10.2模拟] plan
    [10.2模拟] book
    [bzoj4999] This Problem Is Too Simple!
    [9.28模拟] good
    [bzoj3884] 上帝与集合的正确用法
  • 原文地址:https://www.cnblogs.com/liangtao999/p/12461362.html
Copyright © 2020-2023  润新知