অনুমতি অস্বীকার: স্টার্টফোরগ্রাউন্ডে android.permission প্রয়োজন F FOREGROUND_SERVICE
android-service android-permissions (2)
অনুমতি অস্বীকার: স্টার্টফোরগ্রাউন্ডে android.permission প্রয়োজন F FOREGROUND_SERVICE
যে অ্যাপ্লিকেশনগুলি অ্যান্ড্রয়েড 9 (এপিআই স্তর 28 টি) বা তার চেয়ে বেশি এবং অগ্রভাগের পরিষেবাগুলি ব্যবহার করে তাদের অবশ্যই
FOREGROUND_SERVICE permission
জন্য আবেদন করতে হবে।
সুতরাং এখন আমাদের ম্যানিফেস্ট ফাইলে ফরগ্রাউন্ড পরিষেবা অনুমতি যুক্ত করা দরকার
-
এটি
Service.startForeground
ব্যবহার করার জন্য একটি নিয়মিত অ্যাপ্লিকেশনকে মঞ্জুরি দেয়
নমুনা
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
FOREGROUND_SERVICE
একটি সাধারণ অনুমতি, সুতরাং সিস্টেম স্বয়ংক্রিয়ভাবে অনুরোধ অ্যাপ্লিকেশনটিকে এটি মঞ্জুর করে।
এটি অ্যান্ড্রয়েড 9 / পাই এর মাইগ্রেশন নোটগুলি পরীক্ষা করে দেখুন
- পরিবর্তন
অগ্রভাগ পরিষেবা অনুমতি
- সারাংশ
অগ্রগণ্য পরিষেবাগুলি ব্যবহার করতে চাইছে এমন অ্যাপ্লিকেশনগুলিকে অবশ্যই প্রথমে প্রথমে FOREGROUND_SERVICE অনুমতির জন্য আবেদন করতে হবে। এটি একটি সাধারণ অনুমতি, সুতরাং সিস্টেম স্বয়ংক্রিয়ভাবে এটি অনুরোধ অ্যাপ্লিকেশনটিকে মঞ্জুরি দেয়। অনুমতি ব্যতীত অগ্রভাগের পরিষেবাটি চালু করা একটি সুরক্ষা ধারণাটি ছুঁড়ে দেয়।
startForeground()
পড়ুন
startForeground()
-
অ্যাপ্লিকেশনগুলিকে এপিআই
Build.VERSION_CODES.P
করার উদ্দেশ্যে লক্ষ্য করেBuild.VERSION_CODES.P
ইদানীং আমরা হঠাৎ নিম্নলিখিত কয়েকটি স্ট্যাকের চিহ্ন খুঁজে পেয়েছি। কেন হতে পারে? অ্যাপটি কোনও মিডিয়া বিজ্ঞপ্তি এবং সবকিছু দিয়ে অডিও কমেন্টারি পরিষেবাটিকে অগ্রভূমিতে স্থানান্তরিত করার চেষ্টা করার সময় থেকে এটি ঘটে।
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)
মুক্তির নোটগুলি সঠিকভাবে না পড়ার জন্য আপনি এটি পান।
targetSdkVersion = 28
(অ্যান্ড্রয়েড 9 / পাই) সেট করার
targetSdkVersion = 28
এটি ঘটতে শুরু করে এবং স্পষ্টভাবে যেমন
মাইগ্রেশন নোটগুলিতে
বলা হয়েছে:
অগ্রগণ্য পরিষেবাগুলি ব্যবহার করতে চাইছে এমন অ্যাপ্লিকেশনগুলিকে অবশ্যই প্রথমে প্রথমে FOREGROUND_SERVICE অনুমতির জন্য আবেদন করতে হবে। এটি একটি সাধারণ অনুমতি, সুতরাং সিস্টেম স্বয়ংক্রিয়ভাবে এটি অনুরোধ অ্যাপ্লিকেশনটিকে মঞ্জুরি দেয়। অনুমতি ব্যতীত অগ্রভাগের পরিষেবাটি চালু করা একটি সুরক্ষা ধারণাটি ছুঁড়ে দেয়।
সুতরাং
সমাধানটি কেবলমাত্র
AndroidManifest.xml
এ নিম্নলিখিতগুলি যুক্ত করা:
<manifest ...>
...
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
...
<application ...>
...
</manifest>