İzin Reddi: startForeground android.permission.FOREGROUND_SERVICE gerektirir


195

Son zamanlarda aniden aşağıdaki yığın izlerinden birkaçını görüyoruz. Neden olabilir? Bu, uygulamanın bir medya bildirimi hizmetini bir medya bildirimi ve her şeyle ön plana taşımaya çalıştığı zamandır.

java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE
    at android.os.Parcel.createException(Parcel.java:1942)
    at android.os.Parcel.readException(Parcel.java:1910)
    at android.os.Parcel.readException(Parcel.java:1860)
    at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5198)
    at android.app.Service.startForeground(Service.java:695)
    at com.example.app.services.AudioService.setUpMediaNotification(AudioService.java:372)
    at com.example.app.services.AudioService.setUpAndStartAudioFeed(AudioService.java:328)
    at com.example.app.services.AudioService.onStartCommand(AudioService.java:228)
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3667)
    at android.app.ActivityThread.access$1600(ActivityThread.java:199)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: android.os.RemoteException: Remote stack trace:
    at com.android.server.am.ActivityManagerService.enforcePermission(ActivityManagerService.java:9186)
    at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1189)
    at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:870)
    at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:20434)
    at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:976)

Yanıtlar:


413

Bu, targetSdkVersion = 28(Android 9 / Pie) veya üstünü ayarladıysanız ve FOREGROUND_SERVICEizin kullanımını bildirmediyseniz gerçekleşir.

Gönderen göç notları Android 9 için:

Ön plan hizmetlerini kullanmak isteyen uygulamalar şimdi önce FOREGROUND_SERVICE iznini istemelidir. Bu normal bir izintir, bu nedenle sistem otomatik olarak istekte bulunan uygulamaya verir. İzinsiz bir ön plan hizmetini başlatmak bir SecurityException özel durumu oluşturur.

Çözüm aşağıdakileri eklemektir AndroidManifest.xml:

<manifest ...>
     ...
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     ...
     <application ...>
     ...
</manifest>

8
Bu, targetSdkVersion28 değerinden düşükse, Ön Plan hizmetlerini 28 çalışan cihazlarda çalıştırmak için izne ihtiyacımız olmadığı anlamına mı geliyor ?

3
Bu, hedefi düşürmek için bana garip bir çözüm gibi geliyorSdkVersion
Denny

2
@Sjd İyi bir şekilde kuracaklar. Öyle değil maxSdkVersion.
Roy Solberg

9
Cevabınızı yükseltin, ancak sürüm notları geriye dönük uyumlu olmayan API'ler oluşturmak için bir mazeret değildir. Bu durumda Google, bir kullanıcıdan uygulamayı sessizce kilitlemek yerine izin vermesini veya en azından bir ipucu vermesini isteyebilirdi. Android'in son zamanlarda bakımı çok zorlaşıyor.
Oleg Gryb

2
@miladsalimi AndroidManifest.xml dosyasını Android Studio'da açarsanız, "birleştirilmiş manifest" i görmeyi seçebilirsiniz. Belki sizin için kullanım izni veren bir bağımlılık var mı?
Roy Solberg

43

İzin Reddi: startForeground android.permission.FOREGROUND_SERVICE gerektirir

Android 9'u (API düzey 28) veya daha üstünü hedefleyen ve ön plan hizmetlerini kullanan uygulamalar için istekte bulunmalısınız FOREGROUND_SERVICE permission.

Şimdi manifest dosyasına Foreground hizmet izni eklememiz gerekiyor

  • Düzenli bir uygulamanın Service.startForeground

ÖRNEKLEM

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

FOREGROUND_SERVICE normal bir izin olduğundan sistem otomatik olarak istekte bulunan uygulamaya verir.

Android 9 / Pie'ın geçiş notlarını kontrol edin

  • Değişiklik

Ön plan servis izni

  • özet

Ön plan hizmetlerini kullanmak isteyen uygulamalar şimdi önce FOREGROUND_SERVICE iznini istemelidir. Bu normal bir izintir, bu nedenle sistem otomatik olarak istekte bulunan uygulamaya verir. İzinsiz bir ön plan hizmetini başlatmak bir SecurityException özel durumu oluşturur.

Ayrıca Oku startForeground()

  • Uygulama hedefleme API'sı Build.VERSION_CODES.Pveya üstü, Manifest.permission.FOREGROUND_SERVICEbu API'yı kullanmak için izin istemelidir .

efendim i çözüm çalıştı ama tüm android cihazlar için benim için çalışmıyor. Oppo F11 Pro gibi çalışıyor ama Samsung, Nokia ve Mi telefon uygulamasında çöktü ve log aynı hatayı var. bana ne yaptığımı söyleyebilirim düzeltmek?
Kapil soni

@Kapilsoni `ne alıyorsanız hata log` aynı hata var
Nilesh Rathod

bu hatayı aldım "android.app.RemoteServiceException: startForeground için kötü bildirim:"
Kapil soni

8

API seviyesi 28 veya üstü için FOREGROUND_SERVICE izni gerekir. Aksi takdirde, çalışamaz ve bir istisna alır.

Eklenerek çözülecek

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

AndroidManifest.xml dosyasında.


ben ekledim ama benim için sabit değil
Kapil soni

@Kapilsoni benim için aynı sorunu ekledi, ancak API 29'daki yetersiz izin nedeniyle hala çöküyor, çözmeyi başardınız mı?
ArturM

4

Play Store'daki uygulama güncellemeleri için targetSdkVersionen az 281 Kasım 2019 tarihinden itibaren A zorunlu olacak. Bu nedenle, hedef API'yi değiştirmeniz ve ardından FOREGROUND_SERVICEkilitlenmeden kaçınmak için izin istemeniz gerekirstartForeground()


0

Bunun FOREGROUND_SERVICEçalışma zamanı izni gereksinimi gerektirmediğini belirtmek . Aşağıya Manifestlere ekle

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

yukarıdaki satır önce eklenmelidir <application

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.