#android #android-intent #broadcastreceiver
#Android #android-намерение #broadcastreceiver
Вопрос:
Я хочу запустить действие в фоновом режиме (даже если приложение убито) с помощью ACTION_MANAGE_OVERLAY_PERMISSION . Это работает только тогда, когда приложение находится на переднем плане. Мой код приведен ниже;
1. Файл манифеста
<uses-permission android:name="android.permission.WAKE_LOCK" />
<receiver
android:name=".digitalclock.DigitalClockReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
</intent-filter>
</receiver>
2-BroadcastReceiver
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action.equals(Intent.ACTION_SCREEN_OFF)) {
if (Build.VERSION.SDK_INT >= 29) {
val intent2 = Intent(context, DigitalClockActivity::class.java)
intent2.putExtra("unlock_screen", true)
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context?.startActivity(intent2)
}
}
}
Я также запустил службу в широковещательном режиме, и она всегда получает фильтр намерений, даже если приложение отключено. Класс обслуживания также запускается, но activity нет.
Комментарии:
1. что вы используете
ACTION_MANAGE_OVERLAY_PERMISSION
в коде, как написано в вашем вопросе?2. У меня есть переключатель (по умолчанию false), если пользователь хочет переключиться на true, он должен предоставить разрешение, тогда свойство будет включено, поэтому я выполняю эту работу в связанной деятельности. Если свойство не включено, трансляция никогда не будет работать в моем коде.
3. итак, ваш широковещательный приемник запускается, но действие не запускается?
4. да, точно, действие не запускается
Ответ №1:
Попробуйте заменить
val intent2 = Intent(context, DigitalClockActivity::class.java)
с жестко запрограммированным пакетом и именем класса
val i = Intent();
i.setClassName("com.test", "com.test.DigitalClockActivity")
Измените имя класса пакета и действия на свое собственное!
Комментарии:
1. Это работает, когда приложение находится в фоновом режиме, но работает только на эмуляторе, когда приложение отключено, а не на реальном устройстве.
2. @Ahmet вы протестировали на реальном устройстве после замены, как написано в моем ответе? какая версия Android у вашего устройства?
3. да, я тестировал на реальном устройстве Xiaomi (API 29), оно отлично работает на эмуляторе Android (API 29)
4. @Ahmet сначала удалите приложение со своего реального устройства. затем внесите изменения, написанные в моем ответе, а затем переустановите на своем реальном устройстве
5. Я удалил «adb uninstall com.xxx.xxx», но, к сожалению, это не сработало. Что еще я могу изменить?