86

एंड्रॉइड मार्शमलो में, जब आवश्यक हो तो रनटाइम पर अनुमतियों का अनुरोध किया जाना चाहिए, बजाय ऐप इंस्टॉल होने पर सभी के लिए अनुमति दी जानी चाहिए। हालांकि, मैं केवल एक गतिविधि से अनुमतियों का अनुरोध कर सकता हूं, जो एक समस्या है क्योंकि मेरे ऐप में केवल सेवाएं हैं। (ऐसा क्यों है, आप पूछ सकते हैं? ऐप में एक एंड्रॉइड वेयर घड़ी का चेहरा अंदर बंडल किया गया है, और सभी फोन घड़ी पर भेजने के लिए पास की तस्वीरों को देखता है - कोई गतिविधि आवश्यक नहीं है। लेकिन इसे स्थान अनुमतियों की आवश्यकता होती है।)एंड्रॉइड मार्शमलो में सेवा से अनुमतियों का अनुरोध कैसे करें

तो, क्या सेवा से अनुमतियों का अनुरोध करने का कोई तरीका है? या किसी भी तरह से अतीत में स्थापित समय पर अनुमतियों को बल दिया जा सकता है?

+0

इस समस्या को भी आवेदन वर्ग – itzhar

+0

अंदर इस प्रयास करें यह काम http://stackoverflow.com/a/41221852/5488468 –

+0

मेरे क्रम अनुमतियों को संभालने के लिए पुस्तकालय हो सकता है:

इसे आजमाइए करें किसी भी संदर्भ से आसानी से और "फिर से मत पूछो" हैंडल करता है। https://github.com/nabinbhandari/Android- अंक –

उत्तर

11

मैं सहमत हूं, यह सेवाओं के लिए बहुत परेशानी है, मुझे लगता है कि आपको इसके लिए एंड्रॉइड डेवलपर पूर्वावलोकन पृष्ठ पर किसी समस्या की रिपोर्ट करनी चाहिए।

फिलहाल, मुझे लगता है कि सेवा पर अनुमति की जांच करना सबसे अच्छा समाधान है, और अगर अनुमति गुम हो तो अधिसूचना दिखाएं। इससे भी बेहतर, जब उपयोगकर्ता अधिसूचना पर प्रेस करते हैं तो अनुमति के लिए अनुरोध करने के लिए एक संवाद सक्रियता बनाएं।

33

requestPermission() केवल एक Activity और नहीं से कहा जा सकता है एक Service (checkPermission() के विपरीत है कि केवल PackageManager आवश्यकता है)। तो आपको इसके आसपास जाने के लिए कुछ अतिरिक्त काम करने की ज़रूरत है; आपको अपने ऐप में Activity प्रदान करने की आवश्यकता है और, उदाहरण के लिए, आपके Service इसकी अनुमतियों की जांच कर सकते हैं और यदि उन्हें अभी तक प्रदान नहीं किया गया है, तो यह एक अधिसूचना बना सकता है और यह उपयोगकर्ता को एक वर्णनात्मक लघु संदेश के साथ सूचित कर सकता है एक अधिसूचना है और अधिसूचना पर क्लिक करते समय क्या होने की आवश्यकता है, आदि

+0

यह समाधान है [बेंजामिन Poiesz] (https://plus.google.com/111703124687948696691/posts) प्रस्तावित। आप इसे [पॉडकास्ट] (http://androidbackstage.blogspot.jp/2015/08/episode-33-permission-mission.html) 23:40 – xiaomi

+0

से सुन सकते हैं आप खंड के अंदर requestPermission() को भी कॉल कर सकते हैं। –

+3

स्थान अपडेट के लिए समय-समय पर चल रहे पृष्ठभूमि सेवा की जांच के मामले का समाधान क्या है और मैं सेटिंग्स में स्थान अनुमति को बंद कर देता हूं।चूंकि कोई गतिविधि नहीं है, इसलिए जब मैं ऐप – stud91

-3

आप उपयोगकर्ता उत्तर के प्राप्तकर्ता को बनाने के लिए ResultReceiver का उपयोग कर सकते हैं, फिर इसे अधिसूचना PendingIntent के माध्यम से गतिविधि में कॉलबैक के रूप में पास कर सकते हैं। Reference

8

PermissionEverywhere लाइब्रेरी पर एक नज़र डालें। यह आपको किसी भी संदर्भ से अनुमति का अनुरोध करने की अनुमति देता है।

यह एक अधिसूचना क्लिक करता है जिस पर यह अनुमति मांगने वाली गतिविधि खोलता है। लाइब्रेरी की GitHub पेज से

नमूना कोड: -

@Override 
    protected Boolean doInBackground(Void... params) { 
     PermissionResponse response = PermissionEverywhere.getPermission(getApplicationContext(), 
     new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
       REQ_CODE, 
       "Notification title", 
       "This app needs a write permission", 
       R.mipmap.ic_launcher) 
       .call(); 
     //waits.. 
     boolean isGranted = response.isGranted(); 

     if(isGranted){ //changed from isGrante to isGranted 
     // Do stuff 
     } 
    } 
+1

मैंने एक सेवा में async संस्करण की कोशिश की है और यह काम नहीं किया है। ऑनम्प्ले को कभी भी –

+0

नहीं कहा जा रहा है अच्छा विचार है, लेकिन यह भंडार में उपलब्ध नहीं है – naXa

+0

यह पैकेज मेरे लिए काम करता है, सुझाव के लिए धन्यवाद। हालांकि, मुझे लगता है कि मैंने एसिंक संस्करण को आजमाया नहीं है। साथ ही, उन लोगों के लिए जिन्हें 'अनुमतिकरण हर जगह' का उपयोग करने में समस्याएं आ रही हैं, सुनिश्चित करें कि आप अपने मैनिफेस्ट में सहायक गतिविधि घोषित करते हैं और सुनिश्चित करते हैं कि जब आप इसे घोषित करते हैं, तो यह सही पैकेज से जुड़ा हुआ है (यदि आप 'अनुमतिकरण हर जगह' का उपयोग कर रहे हैं अलग पैकेज)। मुझे यह महसूस करने में काफी समय लगा कि मैं वास्तव में मैनिफेस्ट में 'अनुमतियाँ हर जगह' पैकेज निर्दिष्ट नहीं कर रहा था। – user3570982

2

एक बहुत ही सरल पुस्तकालय है कि वास्तव में यह कर की अनुमति देता है नहीं है। आप कहीं भी (यहां तक ​​कि किसी सेवा से) अनुमतियों की जांच कर सकते हैं, इस पर आधारित है कि ऐप अग्रभूमि या पृष्ठभूमि में है या नहीं, यह या तो सामान्य संवाद दिखाता है या अनुमतियों के लिए एक अधिसूचना उत्पन्न करता है। कोड को समझना वास्तव में आसान है और इसका उपयोग करना भी वास्तव में आसान है। Android Permissions

2
@SuppressLint("NewApi") 
public void checkPerm() 
{ 
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

    if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {....} 
} 
संबंधित मुद्दे