【问题标题】:On Boot Broadcast Receiver not working in miui of Xiaomi (Poco x3)启动广播接收器在小米的 miui 中不起作用(Poco x3)
【发布时间】:2021-01-15 17:27:50
【问题描述】:

我知道以前有人问过很多类似的问题,但无论我尝试什么解决方案都无法解决问题。

我有一个广播接收器代码,如下所示。

class OnBootBroadcast : BroadcastReceiver() {

    override fun onReceive(context: Context?, intent: Intent?) {
        logD("onReceive() started -> intent action: [${intent?.action}]")

        // this is only to test if on boot broadcast is working       
        context?.let {
            val i = Intent()
            i.setClass(it, MainActivity::class.java)
            i.flags = Intent.FLAG_ACTIVITY_NEW_TASK;
            it.startActivity(i);
        }
        // tried to test by adding notification as well, didn't show

        // do stuff here
    }
}

我的清单文件是这样的

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

<application
    android:name=".CustomApplication"
    android:allowBackup="true"
    android:fullBackupContent="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".view.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <receiver android:name=".broadcast.NotificationBroadcast" />
    <receiver
        android:name=".broadcast.OnBootBroadcast"
        android:enabled="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>

    <provider
        android:name="androidx.work.impl.WorkManagerInitializer"
        android:authorities="${applicationId}.workmanager-init"
        tools:node="remove" />
</application>

我知道像 MIUI 这样的中国定制 ROM 会杀死应用程序的后台服务。 为了解决这个问题,我尝试了以下方法。

  1. 在“安全”>“管理应用”中开启“自动启动” 当通过滑动关闭应用程序时,工作管理器后台服务无法正常工作的这个固定问题。但没有解决广播问题。

  2. 在“设置”>“电池和性能”>“应用节电”中设置“无限制”

我正在尝试使用开机广播来重新添加一些警报管理器以获得准确的定时通知。 如果有一些替代方案可以实现这一点,那么该信息也将不胜感激。

提前致谢:)

【问题讨论】:

    标签: android broadcastreceiver xiaomi


    【解决方案1】:

    我的小米手机也有同样的问题。我尝试了许多建议的解决方案,但没有奏效。所以我有点得意忘形,将所有可能的 BOOT_COMPLETE 触发器添加到我的意图过滤器中,它起作用了。

            <receiver android:name=".receiver.BootReceiver"
                android:enabled="true"
                android:exported="true"
                android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT" />
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.ACTION_BOOT_COMPLETED" />
                    <action android:name="android.intent.action.REBOOT" />
                    <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                    <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
                    <action android:name="android.intent.action.ACTION_SHUTDOWN" />
                </intent-filter>
            </receiver>
    

    【讨论】:

      【解决方案2】:

      最后,我不需要更改清单文件中的任何内容。只有 android.intent.action.BOOT_COMPLETED 没问题,因为其余的隐式广播不在 exception list 中。

      主要问题是 MIUI 需要几分钟才能开始广播,我在日志中没有注意到这一点。当它启动时,由于测试代码是从后台进程启动一个活动,因此 MIUI 正在杀死它(根据日志,对于由 MIUI 启动的后台进程进行启动广播,启动前台 UI 是不启用的)。因此,在我删除活动启动代码后,也开始显示更多日志。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        相关资源
        最近更新 更多