android设备开机广播收不到怎么办

       最近这一段时间,一直在和android板子较劲,虽说开发的时候不管是代码量还是页面上,相较于纯做软件的人来说,都少了一些。但扯淡的地方就在于硬件不稳定,不像软件我写1就是1,硬件你可以写的是1,但是结果可能是0。最近做的一个业务上预留了一个静默升级和开机或者断电自启动的功能点。静默升级已经试验正确了,等回头专门写一个来讲述一下,今天说一下开机自启动,简单记一下坑。

       首先,开机这个行为,毫无疑问肯定有个系统广播,那思路就是我们去在我们的代码里来个注册一个广播,而且是静态广播来搞一下这个事情基本上就好了。下边来个示例代码哈,我们去继承一个BroadcastReceiver ,然后找到固定的action,即获取到android.intent.action.BOOT_COMPLETED,在里面做个逻辑判断即可。

public class BootCompleteReceiver extends BroadcastReceiver {

    public BootCompleteReceiver() {

    }

    //开机接受广播
    @Override
    public void onReceive(Context context, Intent intent) {

        Logger.d(getClass().getSimpleName(),"开机自启动广播");

        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {

            intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());

            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

            context.startActivity(intent);

        }
    }
}

 然后再清单文件中在来一波代码,采用静态注册的方式,这个为什么静态就不说原因了,毕竟都是搬砖的熟人了,哈哈

 <receiver
            android:name=".receiver.BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>

然后一把run,可以测试一波,到此基本上就结束了。下面有几个小坑给大家说一下,虽说android板子的开发相对来说自由,因为都是root过的,有最高权限,但是基本的核心逻辑跟软件还是一样的。

1.一个小坑就是,在接受到广播之后,处理开启APP逻辑的时候,Intent.FLAG_ACTIVITY_NEW_TASK,这个非常重要,一定记得写啊,要不然程序会挂的。至于clean要不要写,开心就好。
2.另外一个就是代码没问题,广播也注册了,可是没起作用,这个原因有的时候比较奇怪,后来我查了一些小资料,又自己做了一点测试,要是纯软件的话,可以看看手机自启动权限是不是被设置拦截或者阻止,或者被那啥了,做软件的应该都懂的。另外一个就是老的手机,或者android板子上,安装程序优先选在了sd卡上了,要不设置一波,或者直接改一下配置文件,如下图所示

<manifest
    package="cn.weixq.autorun"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="internalOnly">

     我这开发android板子,的内存卡是外置的,跟老款的手机一样,就是因为上述的问题引起的,改了之后,瞬间飞起来,如果还有其它搬砖的朋友有其它问题导致该广播不起作用,可以留言再交流。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Unity在Android 10上的开机启动可以通过以下步骤实现: 1. 创建一个Android Studio项目,将Unity构建为Android项目并导出到该项目中。 2. 找到相应的AndroidManifest.xml文件,在应用程序标记中添加以下代码: <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 3. 在Intent过滤器中添加以下信息: <action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="android.intent.category.DEFAULT"/> 4. 在应用程序中创建一个BroadcastReceiver类,用于接系统发送的开启广播信号,并启动Unity应用程序。 5. 在BroadcastReceiver中设置以下代码: Intent intent=new Intent(context, UnityPlayerActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); 6. 将BroadcastReceiver类添加到AndroidManifest.xml文件的接器列表中。 这些步骤可以在Android 10中实现Unity应用程序的开机启动。但需要注意的是,Android系统有一些限制,因此应用程序可能无法在完全关闭的状态下自动启动。同样,如果用户启用了“自动冻结”功能,则应用程序可能会被冻结,并且无法自动启动。因此,开机启动只是一个方便用户使用的功能,不能保证总是可用。 ### 回答2: 在Unity中实现Android 10开机自启动主要需要以下步骤: 1. 编写Java类:创建一个继承自Broadcast Receiver的Java类,并在其中实现开机自启动的代码。这些代码需要使用Android SDK中的一些API,如Context、Intent等。 2. 编写AndroidManifest.xml文件:在这个文件中声明接系统广播的Java类,同时也需要声明其所需要的权限,如接开机广播的权限。 3. 利用Unity调用Java代码:在Unity中通过C#代码调用上述编写的Java类,并执行其中的开机自启动代码。 另外,需要注意的是,由于Android 10对于后台应用的管理更加严格,因此实现开机自启动时需要考虑应用是否在后台运行等问题,否则可能导致应用被杀死而无法实现开机自启动功能。 ### 回答3: Unity 是一款跨平台的游戏引擎,可以支持多种不同的操作系统和设备,包括 Android 平台。 在 Android 10 中,开机启动的方式和以前的版本略有不同。根据 Android 官方文档,Android 10 中已经禁用了大多数应用程序的开机启动权限,以避免启动时的资源消耗和隐私问题。 因此,在 Unity 中实现 Android 10 的开机启动需要进行以下操作: 1. 在 AndroidManifest.xml 文件中添加启动器(Launcher)过滤器,以指定应用程序在启动时使用的活动或服务。 2. 使用 JobScheduler API 进行调度和管理应用程序的后台任务,以避免在启动时消耗太多资源。 3. 确保应用程序已获取“自启动管理”权限,并在设置中启用“自动启动”选项,以便在系统启动时自动启动应用程序。 Unity 虽然是一款跨平台的游戏引擎,但是也需要考虑不同版本的操作系统的特点和限制。在 Android 10 中,开机启动需要特别注意系统的安全和隐私问题,避免对用户体验和手机性能造成负面影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deyson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值