华为设备上的Intent BOOT_COMPLETED无法正常工作

5

我想监听我的Android应用程序中的APN更改。

因此,我在android.intent.action.BOOT_COMPLETED上启动一个服务。 该服务启动一个ContentObserver,监听对content://telephony/carriers/preferapn的更改。

我在几个不同的设备上测试了这个设置(例如带有Android 5.0的LG Spirit,带有6.0的Samsung A3,Emulator Nexus5和带有7.0的Huawei P9 Lite)。

在华为手机上,我的服务的onCreate没有被调用。

我的另一种方法是在清单中注册的BroadcastReceiverandroid.intent.action.ANY_DATA_STATE结合使用,在这部手机上也无法工作。

清单的相关部分:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  

...

<receiver android:name=".ConnectivityChangeReceiver">
    <intent-filter>
        <action android:name="android.intent.action.ANY_DATA_STATE" />
    </intent-filter>
</receiver>

<receiver android:name=".APNChangedServiceStarter" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
    </intent-filter>
</receiver>

<service android:name=".APNChangedService"></service>

它在三星手机上工作了吗? - Avinash Roy
除了华为手机,这两种方法在所有提到的设备/模拟器上都可以使用。 - woodii
你在华为手机上关闭了快速启动模式吗? - Avinash Roy
3
在华为设备上,您必须将应用程序添加到“电话管理器”的白名单中。您需要在自动启动和能量管理器中将其添加到白名单中。此外,该应用程序必须在使用前打开一次才能正常工作。这绝对令人不快,您无法做任何事情,只能在应用程序中向用户提供相关信息。我在华为设备上遇到过这种情况,花费了很长时间才找到这个解决方案。 - Opiatefuchs
可能是BOOT_COMPLETED not working Android的重复问题。 - PEHLAJ
显示剩余3条评论
2个回答

9

仅作更新,华为在Android 9版本中更改了菜单路径。

在华为Mate 10 Pro上,进入以下菜单:

设置 -> 电池 -> 应用启动 -> 禁止自动管理您的应用程序。

将弹出一个窗口,询问您想允许什么(默认为全部正确)。请确保第一个选项,自动启动已启用。


4
华为手机内置启动管理器,可能是该应用程序尚未启用。

from https://www.isunshare.com/android/how-to-control-startup-apps-on-huawei-android.html

前往设置 > 全部,选择启动管理器。 此程序用于管理Android手机上的启动应用程序。 允许或禁止应用程序在华为手机启动后自动运行。


我在我的手机管理器中没有提到的选项,而且当我按照 https://www.youtube.com/watch?v=GIPxTlJOT38 中的描述时,我无法安装所提到的应用程序“PM Plus”以启用此设置。无论如何:这可能是我们的解决方案,但永远不会成为最终用户可靠的解决方案。 - woodii
用户没有解决方案,只有信息。这是华为应该负责的事情,但用户不理解,可能会把责任归咎于你的应用程序... - Opiatefuchs
5
在华为 Mate 10 Pro 手机上运行 Android 9(Pie)操作系统中,做如下操作:设置 -> 电池 -> 应用启动 -> 关闭你的应用的自动管理。 - Arkady
@Arkady,这是迄今为止最相关的答案,请将其发布为答案。 - GGets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接