On Boot Broadcast Receiver не работает в miui от Xiaomi (Poco x3)

Я знаю, что раньше задавали много подобных вопросов, но я не мог заставить его работать, какое бы решение я ни пробовал.

У меня есть код широковещательного приемника, подобный следующему.

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, убивающие фоновые службы приложений. Чтобы справиться с этим, я попробовал следующее.

  1. Включите автозапуск в разделе «Безопасность» ›Управление приложениями. Эта исправленная проблема, когда фоновая служба диспетчера работ не работала, когда приложение было закрыто смахиванием. Но проблему с трансляцией не устранили.

  2. Установите «Без ограничений» в настройках ›Батарея и производительность› Экономия заряда в приложении.

Я пытаюсь использовать трансляцию при загрузке, чтобы повторно добавить некоторые диспетчеры сигналов тревоги для точных уведомлений по времени. Если есть какая-то альтернатива, которая может достичь этого, эта информация также будет оценена.

Заранее спасибо :)


person Tahsin Masrur    schedule 15.01.2021    source источник


Ответы (2)


В конце концов, мне не пришлось ничего менять в файле манифеста. Только android.intent.action.BOOT_COMPLETED работал нормально, так как остальные неявные трансляции не находятся в список исключений.

Основная проблема заключалась в том, что MIUI требуется несколько минут для запуска трансляции, чего я не заметил в журнале. И когда он действительно запустился, поскольку тестовый код запускал действие из фонового процесса, MIUI убивал его (согласно журналу, запуск пользовательского интерфейса переднего плана не включен для фонового процесса, запущенного MIUI для загрузочной трансляции). Поэтому после того, как я удалил код запуска активности, стали отображаться и другие журналы.

person Tahsin Masrur    schedule 15.01.2021

У меня была такая же проблема с моим телефоном Mi. Я пробовал много предложенных решений, но это не сработало. Так что я немного увлекся и добавил все возможные триггеры 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>
person Atick Faisal    schedule 15.01.2021