2011-11-12 12 views
14

मैं एक साधारण ऐप पर काम कर रहा हूं जो उपयोगकर्ता के संपर्कों के माध्यम से ब्राउज़ करता है।अनुमति.READ_CONTACTS काम नहीं कर रहा है

java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.HtcContactsProvider2 uri content://com.android.contacts/contacts from pid=27455, uid=10171 requires android.permission.READ_CONTACTS 

मेरे मैनिफ़ेस्ट फ़ाइल इस तरह दिखता है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.android.helloMaps" 
    android:versionCode="1" 
    android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <application android:icon="@drawable/icon" 
     android:label="@string/app_name" 
     android:debuggable="true"> 
     <uses-library android:name="com.google.android.maps" /> 
     <activity android:name=".MapsActivity" 
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.NoTitleBar">    
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

     </activity> 
    </application> 
</manifest> 

मैं द्वारा मेरे संपर्कों को देखने के लिए कोशिश कर रहा हूँ:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 

मैंने दुर्भाग्य से मैं निम्नलिखित त्रुटि प्राप्त हो रही <uses-permission android:name="android.permission.READ_CONTACTS" /> या android:permission="android.permission.READ_CONTACTS"<application> या <activity> जोड़ने की कोशिश की, लेकिन दोनों काम नहीं कर पाए।

मैं विकल्पों से बाहर हो रहा हूं, क्या कोई जानता है कि मैं यहां क्या खो रहा हूं?

+1

जांच क्वेरी करने के लिए यदि आप अपने Android फोन सेटिंग पर अनुमति देने में सक्षम हो जाएगा !! – Steve

उत्तर

12

<uses-permission><manifest> तत्व में निहित होना चाहिए। Structure of the Manifest File देखें। इसलिए इसे <application> या <activity> में डालने का प्रयास करें, काम नहीं करेगा। हताशा चाल: पहले <application>

<uses-sdk android:minSdkVersion="8" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 

इसके अलावा यदि आप अन्य अनुमतियों के बिना परीक्षण कर सकते हैं, उन्हें हटाने <uses-sdk> स्थानांतरित करने के लिए प्रयास करें।

संपादित करें: आप की जाँच कृपया अगर यह आपके मैनिफ़ेस्ट फ़ाइल में अपने टॉप लाइन है:

<?xml version="1.0" encoding="utf-8"?> 
+0

आपके उत्तर के लिए धन्यवाद, मैंने पहले ' 'सभी तरह से स्थानांतरित किया, जिसने मदद नहीं की। इसके बाद मैंने READ_CONTACTS को छोड़कर सभी अनुमतियां हटा दीं, दुर्भाग्य से यह – Danielvd

+0

हाय काम नहीं किया, मैंने अपना जवाब संपादित किया। मुझे यकीन नहीं है कि आपने अपना सभी मैनिफेस्ट या केवल एक हिस्सा पोस्ट किया है या नहीं। किसी भी मामले में, अनुमति घोषणा सही है। क्या आप अपने मैनिफेस्ट पर "मान्य" चलाने की कोशिश कर सकते हैं? – hovanessyan

+0

मेरा बुरा, मेरा पूरा मैनिफेस्ट पोस्ट करना चाहता था, जाहिर है कि मैं पहली पंक्ति भूल गया था। मैंने अपना प्रश्न संपादित किया और पहली पंक्ति को जोड़ा। – Danielvd

0

मैं आज इस मुद्दे में पड़ गए और इसके बाद के संस्करण फिक्स में से कोई भी मेरे लिए काम किया।

मेरे ग्रहण के साथ क्या समस्या समाप्त हो गई थी। मैंने manifest.xml में लिखा था और Permissions टैब में क्या था, वही नहीं था। मेरे manifest.xml में READ_CONTACTS अनुमति थी, लेकिन READ_PROFILE मेरी अनुमति के टैब के तहत इसकी जगह थी।

मुझे पता है कि यह एक पुराना धागा है, लेकिन उम्मीद है कि अगर किसी के पास एक ही समस्या है तो मैंने इसे पूरा कर दिया होगा।

धन्यवाद!

3

मुझे एक ही समस्या थी और मैंने जो भी समाधान पढ़े, उसे हल करने में मदद नहीं की जब तक कि मैंने WRITE_EXTERNAL_STORAGE अनुमति को READ_CONTACTS अनुमति के साथ अनुमति नहीं दी।

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

कोई विचार आपको इसकी आवश्यकता क्यों होगी? – AdamMc331

6

मैं जब तक मैं this article के बारे में पढ़ा कैसे अनुमतियाँ एसडीके 23. के साथ महत्वपूर्ण संकेत शुरू कर नियंत्रित किया जाता है पूरी तरह से इस पर अटक गया था:

If the application's targetSdkVersion is set to less than 23. It will be assumed that application is not tested with new permission system yet and will switch to the same old behavior: user has to accept every single permission at install time and they will be all granted once installed !

मैं अपने gradle.build फ़ाइल को खोल दिया और targetSdkVersion 22 करने के लिए targetSdkVersion 23 बदल गया है, और अब सब कुछ अच्छा काम करता है! मुझे अंततः नई अनुमति प्रणाली में निर्माण करने के लिए समय मिल जाएगा और targetSdkVersion 23 पर वापस स्विच करें, जो शायद अधिक सही उत्तर है। यह एक अस्थायी शॉर्टकट है।

+1

यह मेरे लिए था, धन्यवाद! (एंड्रॉइड द्वारा फेंक दिए गए अपवाद में त्रुटि संदेश बहुत उपयोगी नहीं था।) हमने रनटाइम अनुमतियों का अनुरोध करने के लिए उचित रूप से कार्यान्वित करना चुना, और इसके लिए [आधिकारिक दस्तावेज़] (https://developer.android.com/training/permissions/requesting। एचटीएमएल) आखिरकार सबसे उपयोगी संसाधन थे। – Jonik

3

अपने पर में इस विधि

ActivityCompat.requestPermissions (यह, नए String [] {Manifest.permission बनाने की कोशिश करें।READ_CONTACTS}, 1);

1

उपरोक्त में से कोई भी मदद नहीं करता है। समाधान काफी सरल है। आपको रनटाइम अनुमति अनुरोध की आवश्यकता होगी।

आपके मैनिफेस्ट में अनुमति देने के साथ या बिना, आपको उपयोगकर्ता को ऑन-द-फ्लाई से उस अनुमति का अनुरोध करना होगा। if(getApplicationContext().checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);

उसके बाद ही अनुमोदन के बाद आप संपर्क फोन नंबर/नाम आदि

संबंधित मुद्दे