Bir uygulamam var telefon yeniden başlatılınca otomatikmen uygulama içindeki servisin çalışması lazım
class BootReceiver: MybrodcastReciver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == Intent.ACTION_BOOT_COMPLETED) {
val serviceIntent = Intent(context,MyForegrounAppService::class.java)
context?.startForegroundService(serviceIntent)
}
}
} önceden böyle bir yapı var dı ama şu an çalışmıyor ne yapabilirim
BootReceiver android 8 den sonra problem oluyor
4
●44
- 01-11-2023, 11:44:06
- 01-11-2023, 11:48:33Chatgbt reis şöyle diyor:onurgndz1905 adlı üyeden alıntı: mesajı görüntüle
İlk olarak, sınıf adınızın "MybrodcastReciver" olması yerine "BroadcastReceiver" olması gerekiyor. İlk satırı şu şekilde güncelleyin:
class BootReceiver : BroadcastReceiver() {
Intent.ACTION_BOOT_COMPLETED yerine BroadcastReceiver için doğru aksiyonu kullanmalısınız. Android 10 ve sonrasında ACTION_BOOT_COMPLETED artık kullanılamaz, bu nedenle işleri düzgün çalıştırmak için REBOOT permission eklemelisiniz. Aşağıdaki şekilde güncelleyebilirsiniz:
class BootReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if (intent?.action == "android.intent.action.REBOOT") { val serviceIntent = Intent(context, MyForegroundAppService::class.java) context?.startForegroundService(serviceIntent) } } }Son olarak, bu işlemi gerçekleştirebilmek için manifest dosyanızda uygun izinleri eklemelisiniz. Manifest dosyanızın içinde izin eklemesi yapmalısınız:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMP LETED" />
Bu adımları takip ederek, telefonun yeniden başlatılması durumunda uygulamanızın servisinin başlaması gerekmelidir. - 01-11-2023, 12:02:56cevabınız için teşekkürler ama maalesef REBOOT permission eklememe rağmen çalışmıyor </receiver>YasinReal adlı üyeden alıntı: mesajı görüntüle
<receiver android:name=".receiver.BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.REBOOT" />
</intent-filter>
</receiver> - 01-11-2023, 12:05:15Özür dilerim, yakın tarihli Android sürümlerinde "android.intent.action.REBOOT" eylemi artık kullanılamayabilir. Bu nedenle işlemi gerçekleştirmek için başka bir yaklaşım gerekebilir. Android 10 ve sonrasında, cihazın yeniden başlatılmasını işleyen uygulamalara verilen yetkiler sınırlıdır.onurgndz1905 adlı üyeden alıntı: mesajı görüntüle
Bunun yerine, cihazın yeniden başlatılmasını algılamak ve servisinizi başlatmak için "BOOT_COMPLETED" eylemini kullanabilirsiniz. Ancak, bu eylem için kullanılabilirlik Android 8 (Oreo) ve öncesinde sınırlıdır ve kullanıcı izni gerektirebilir.
İzni manifest dosyanıza ekledikten sonra, kullanıcının bu izni kabul etmesi gerekir. İşte manifest dosyanızda izin eklemesi ve kullanıcı izni isteme kodunun nasıl eklenmesi gerektiği:
AndroidManifest.xml:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application> <!-- ... Diğer uygulama ayarları ... --> <receiver android:name=".receiver.BootReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application>
BootReceiver.java (veya .kt):
class BootReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if (intent?.action == Intent.ACTION_BOOT_COMPLETED) { // Servisi başlat val serviceIntent = Intent(context, MyForegroundAppService::class.java) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { context?.startForegroundService(serviceIntent) } else { context?.startService(serviceIntent) } } } }}
Ayrıca, kullanıcı izni almak için bir açıklama eklemelisiniz. Kullanıcı, uygulamanın cihazın başlangıcında çalışmasına izin verip vermediğini onaylayabilir veya reddedebilir. Bu, kullanıcının uygulamanızın nasıl davranacağını belirlemesine olanak tanır.
Kullanıcı iznini istemek için örnek bir kod parçası:
class YourActivity : AppCompatActivity() { // ... fun requestBootPermission() { val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) intent.data = Uri.parse("package:" + applicationContext.packageName) startActivity(intent) } }Bu şekilde izin aldıktan sonra cihazın yeniden başlatılmasında uygulamanızın servisi başlamalıdır.
https://chat.openai.com - 01-11-2023, 12:08:43hocam maalesef bu yapılar işe yaramaz android 8den önce çalışır ama 8den sonra çalışmazlar bana farklı bir çözüm lazım android 8 ve sonrası içinde çalışacak android 12 ve 13 ü chatgbt bilemiyor çünkü 2021 verileri ie cevap veriyor