অনুমতি অস্বীকার: স্টার্টফোরগ্রাউন্ডে android.permission প্রয়োজন F FOREGROUND_SERVICE


193

ইদানীং আমরা হঠাৎ নিম্নলিখিত কয়েকটি স্ট্যাকের চিহ্ন খুঁজে পেয়েছি। কেন হতে পারে? অ্যাপটি কোনও মিডিয়া বিজ্ঞপ্তি এবং সবকিছু দিয়ে অডিও কমেন্টারি পরিষেবাটিকে অগ্রভূমিতে স্থানান্তরিত করার চেষ্টা করার সময় থেকেই এটি ঘটে।

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)

উত্তর:


411

আপনি যদি targetSdkVersion = 28(অ্যান্ড্রয়েড 9 / পাই) বা তার উপরে সেট করে থাকেন এবং FOREGROUND_SERVICEঅনুমতিটির ব্যবহার ঘোষণা না করেন তবে এটি ঘটবে ।

অ্যান্ড্রয়েড 9 এর জন্য মাইগ্রেশন নোটগুলি থেকে :

অগ্রগণ্য পরিষেবাগুলি ব্যবহার করতে চাইছে এমন অ্যাপ্লিকেশনগুলিকে অবশ্যই প্রথমে প্রথমে FOREGROUND_SERVICE অনুমতির জন্য আবেদন করতে হবে। এটি একটি সাধারণ অনুমতি, সুতরাং সিস্টেম স্বয়ংক্রিয়ভাবে এটি অনুরোধ অ্যাপ্লিকেশনটিকে মঞ্জুরি দেয়। বিনা অনুমতিতে অগ্রভাগ পরিষেবা শুরু করা একটি সুরক্ষা ধারণাটি ছুঁড়ে দেয়।

সমাধানটি কেবল নিম্নলিখিতগুলিতে যুক্ত করা যায় AndroidManifest.xml:

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

8
এর অর্থ যদি আমাদের targetSdkVersion28 এর চেয়ে কম হয় তবে আমাদের 28 টি চলমান ডিভাইসে অগ্রভাগ পরিষেবাগুলি চালনার জন্য কোনও অনুমতি প্রয়োজন নেই?

3
এটি আমার কাছে একটি অদ্ভুত সমাধান বলে মনে হচ্ছে, টার্গেটটি কমিয়ে দেওয়ার জন্য এসডকে ভার্সন
ডেনি

2
@ এসজেডি তারা ঠিকঠাক ইনস্টল করবে। এটি এর মতো নয় maxSdkVersion
রায় সলবার্গ

9
আপনার উত্তর আপ-ভোটিং, কিন্তু রিলিজ নোটগুলি অ-পশ্চাদপটে সামঞ্জস্যপূর্ণ এপিআই তৈরির কোনও অজুহাত নয়। এক্ষেত্রে গুগল কোনও ব্যবহারকারীকে অনুমতি দিতে বা কমপক্ষে নীরবে অ্যাপ ক্র্যাশ করার পরিবর্তে কোনও ইঙ্গিত সরবরাহ করতে বলতে পারে। অ্যান্ড্রয়েড ইদানীং বজায় রাখা খুব কঠিন হয়ে ওঠে।
ওলেগ গ্রিব 26'19

2
@ মিলাদসালিমি আপনি অ্যান্ড্রয়েড স্টুডিওতে অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল খুললে আপনি "মার্জড মেনিফেস্ট" দেখতে বেছে নিতে পারেন। হতে পারে একটি নির্ভরতা আছে যা আপনার জন্য সেই অনুমতি ব্যবহারকে সংক্রামিত করে?
রায় সলবার্গ

43

অনুমতি অস্বীকার: স্টার্টফোরগ্রাউন্ডে 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()

  • অ্যাপ্লিকেশন টার্গেট করে এপিআই Build.VERSION_CODES.Pবা তারপরে অবশ্যই Manifest.permission.FOREGROUND_SERVICEএই এপিআইটি ব্যবহার করার জন্য অনুমতিটির জন্য অনুরোধ করতে হবে ।

স্যার আমি আপনার সমাধানটি চেষ্টা করেছিলাম তবে এটি আমার জন্য সমস্ত অ্যান্ড্রয়েড ডিভাইসগুলির জন্য কাজ করছে না o ওপ্পো এফ 11 প্রো-এর মতো এটির কাজ কিন্তু স্যামসুং, নোকিয়া এবং এমআই ফোন অ্যাপটি ক্র্যাশ হয়ে গেছে এবং লগক্যানে একই ত্রুটি পেয়েছে আপনি কি আমাকে বলুন আমি কী করব ঠিক?
কপিল সোনি

@ ক্যাপিলসনি `লগতে একই ত্রুটি পেয়েছে
নিলেশ

আমি এই ত্রুটিটি পেয়েছি "android.app.RemoteServiceException: startForeground এর জন্য খারাপ বিজ্ঞপ্তি:"
কপিল সোনি

8

২৮ বা ততোধিক স্তরের এপিআই স্তরের জন্য এটির জন্য FOREGROUND_SERVICE অনুমতি দরকার। অন্যথায়, এটি চালাতে পারে না এবং একটি ব্যতিক্রম পেয়েছে।

এটি যুক্ত করে সমাধান করা হবে

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

AndroidManLive.xML ফাইলটিতে।


আমি যোগ করেছি তবে আমার জন্য স্থির নেই
কপিল সোনি

@ ক্যাপিলসনি আমার জন্য একই ইস্যুটি যুক্ত করেছেন, তবে এখনও এপিআই ২৯-এ অপর্যাপ্ত অনুমতির কারণে ক্র্যাশ হয়েছে, আপনি কি এটি সমাধান করার ব্যবস্থা করেছিলেন?
আর্টুরএম

4

প্লে স্টোরটিতে অ্যাপ্লিকেশন আপডেটের জন্য 1 নভেম্বর 2019 থেকে targetSdkVersionকমপক্ষে একটি 28বাধ্যতামূলক হবে। সুতরাং আপনার লক্ষ্য APIটি পরিবর্তন করতে হবে এবং তারপরে ক্রাশটি FOREGROUND_SERVICEএড়ানোর জন্য অনুমতিটির জন্য অনুরোধ করুনstartForeground()


0

উল্লেখ্য যে FOREGROUND_SERVICEরানটাইম অনুমতি প্রয়োজন হয় না। শুধুমাত্র ম্যানিফেস্টে নীচে যুক্ত করুন

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

উপরের লাইনটি আগে যুক্ত করা উচিত <application

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.