Stack Overflow на русском Asked by Binary on November 5, 2021
Приложение должно включатся после рестарта телефона и при подключении зарядки, я сделал это так:
manifest
<receiver android:name=".ChargingReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>
<receiver
android:name=".RestartReceiver" >
<intent-filter>
<action
android:name="android.net.conn.CONNECTIVITY_CHANGE"
tools:ignore="BatteryLife" />
<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>
RestartReceiver
class RestartReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent!!.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
val intent = Intent(context, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context!!.startActivity(intent)
}
}
}
ChargingReceiver
class ChargingReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val intent = Intent(context, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
}
Все работает до Api27+. Почитал что на Api27+ нужно использовать JobScheduler, но не могу найти информацию по конкретно моей задаче, это вообще можно сделать на 27+? Если да подскажите пожалуйста как.
Начиная c версии 8 (api 26) согласно документации броадкаст ресиверы зарегистрированные статически(в манифесте) не принимают неявные (без указания класса) интенты. Вам надо в методе onResume() зарегистрировать свои ресиверы, а так же передать им интент фильтр с необходимыми действиями
private lateinit var chargingReceiver: ChargingReceiver
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
chargingReceiver = ChargingReceiver()
}
override fun onResume() {
super.onResume()
val intentFilter = IntentFilter()
intentFilter.addAction(Intent.ACTION_POWER_CONNECTED)
registerReceiver(chargingReceiver, intentFilter)
}
А в методе onStop() убрать регистрацию
override fun onStop() {
super.onStop()
unregisterReceiver(chargingReceiver)
}
Но это не решит все ваши проблемы. Я лишь ответил на вопрос почему ваши ресиверы не реагируют на интенты. Для решения всех остальных задач я рекомендую детальнее ознакомится с использованием сервисов и процессом автозагрузки приложений.
Answered by blind.falcon on November 5, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP