2013-07-12 5 views
7

मैं Contacts Picker इस तरह के माध्यम से संपर्क में पढ़ना चाहते हैं:अनुमति के बिना संपर्क पढ़ें?

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); 
startActivityForResult(contact, CONTACT_PICK_CODE); 

अगर मैं परिणाम मिलता है, intent.getData() देखने के लिए संपर्क एक uri शामिल है, लेकिन मैं अनुमति READ_CONTACTS जरूरत है इसे पढ़ने के लिए करने के लिए।

मैंने सोचा कि CALL की अनुमति के बिना इस अनुमति के बिना संपर्क प्राप्त करना संभव हो सकता है: अगर मैं सीधे कॉल करना चाहता हूं, तो मुझे इसकी आवश्यकता है, लेकिन इसके बिना मैं फोन ऐप पर एक नंबर भेज सकता हूं, और उपयोगकर्ता को कॉल बटन पर क्लिक करना होगा।
क्या READ_CONTACTS के लिए कोई समान कार्यक्षमता है मुझे पता नहीं है?

उत्तर

8

आप अनुमतियों के बिना संपर्क जानकारी निकालते हैं और कुछ है जैसे आप प्रश्न में बता सकते हैं।

फिर से शुरू करने के लिए, आप एक संपर्क चुनने का इरादा बनाते हैं, यह आपको एक यूआरआई (और अस्थायी रूप से, आपको इसे पढ़ने की अनुमति भी देता है) देता है, फिर आप Contact Provider API का उपयोग कर डेटा पुनर्प्राप्त करने के लिए क्वेरी के लिए यूआरआई का उपयोग करते हैं।

आप Intents guide में इसके बारे में अधिक पढ़ सकते हैं।

उदाहरण के लिए (गाइड से):

static final int REQUEST_SELECT_PHONE_NUMBER = 1; 

public void selectContact() { 
    // Start an activity for the user to pick a phone number from contacts 
    Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE); 
    if (intent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { 
     // Get the URI and query the content provider for the phone number 
     Uri contactUri = data.getData(); 
     String[] projection = new String[]{CommonDataKinds.Phone.NUMBER}; 
     Cursor cursor = getContentResolver().query(contactUri, projection, 
       null, null, null); 
     // If the cursor returned is valid, get the phone number 
     if (cursor != null && cursor.moveToFirst()) { 
      int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER); 
      String number = cursor.getString(numberIndex); 
      // Do something with the phone number 
      ... 
     } 
    } 
} 
2

मुझे आशा है कि ऐसी कार्यक्षमता नहीं है। जिस तरह से आप अनुमति के बिना "अनुमति के बिना कॉल" की तुलना करते हैं, मुझे लगता है कि उपयोगकर्ता को प्रति संपर्क संपर्क डेटा दर्ज करना होगा।

उपयोगकर्ता द्वारा गोपनीयता की सुरक्षा के लिए अनुमतियों से अनुरोध किया जाना चाहिए और डेटा संग्रहण-ऐप्स को रोकने में मदद करता है।

यदि आपके ऐप को संपर्क सूची की आवश्यकता है तो मुझे लगता है कि आप अनुमति जोड़ सकते हैं और उपयोगकर्ता समझ जाएगा कि आपको इसकी आवश्यकता क्यों है। अगर आपको संपर्कों की आवश्यकता नहीं है, तो आपको संपर्कों को पढ़ने की कोशिश नहीं करनी चाहिए।

एक ऐप हमेशा केवल उस कार्यक्षमता प्रदान करना चाहिए जो वास्तव में आवश्यक है और कुछ भी नहीं। यदि कोई डेस्कटॉप प्रोग्राम कंप्यूटर पर आप जो कर रहे हैं, उसके बारे में डेटा एकत्र करेंगे, आप कौन से गेम खेल रहे हैं, आप किसके मेलिंग कर रहे हैं, आदि। आप इसे एक ट्रोजन कहेंगे।

तो अगर इसकी वास्तव में आवश्यकता हो तो संपर्कों को पढ़ें और फिर उपयोगकर्ता आपको अनुमति देगा।

एंड्रॉयड भावना ज्यादातर बनाने के permission.system;)

+0

मैं कुछ हद तक सहमत हैं। लेकिन "एंटर कंटकट डेटा बाय हैंड" डायलर को नंबर भेजें "के लिए एक बुरा उदाहरण है। मैं वास्तविक संख्या भेज सकता हूं, और उपयोगकर्ता को इसे स्वयं दर्ज नहीं करना है। अगर मैं "पृष्ठभूमि में संपर्कों को क्वेरी करना चाहता हूं" जैसे स्वत: पूर्ण संपादन टेक्स्ट में, अनुमति पूरी समझ में आता है। उपयोगकर्ता को पता नहीं हो सकता है कि संपर्कों का उपयोग किया जाता है। लेकिन अगर मैं उपयोगकर्ता को उसका संपर्क एपीपी दिखाता हूं, और उसे एक चुनना है, तो वह कैसे नहीं जानता कि उसके "संपर्क" मधुमक्खी का उपयोग किया जा रहा है? यह संपर्क –

+2

प्लस से एक लेने के लिए डेटा दर्ज करने के बजाय, उसके लिए केवल एक आश्वस्तता है कि अधिकांश अनुमति 'startActivityForResult' पर विफल हो जाती है। ContactPicker में उपयोगकर्ता अपना संपर्क चुन सकता है, और मुझे अनुमति की आवश्यकता के बिना डेटा इरादा वापस मिलता है। दुर्भाग्यवश डेटा में केवल एक लुकअप यूरी होती है, जिसे तब इस अनुमति की आवश्यकता होती है यदि आप इसे पढ़ना चाहते हैं। –

+0

तो मुझे लगता है कि सही समझते हैं कि आप उपयोगकर्ता एक संपर्क चुनने के लिए चाहते हैं, लेकिन इसलिए आप या तो अपने संपर्कों के सभी पढ़ सकते हैं और से chhose के लिए एक सूची बना सकते हैं या उपयोगकर्ता के संपर्क एप्लिकेशन के तहत करने के लिए चयनित एक से संपर्क डेटा भेजने के लिए है चाहिए अपने आशय। दूसरा तरीका उन संपर्क ऐप पर निर्भर असंभव हो सकता है और पहले एक अनुमति की जरूरत है :) – DaKirsche

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