2011-06-03 17 views
7

मैं इस पर एक सीधी जवाब खोजने के लिए नहीं कर पाए हैं। क्या कोई मुझे बता सकता है कि एंड्रॉइड ऐप में फोन के मालिक की संपर्क जानकारी प्राप्त करना संभव है?एंड्रॉइड में "मालिक" संपर्क जानकारी प्राप्त करना संभव है?

+0

आप फोन नंबर का मतलब क्या है? यदि ऐसा है, तो आप getLine1Number (http://developer.android.com/reference/android/telephony/TelephonyManager.html#getLine1Number%28%29) का उपयोग कर सकते हैं हालांकि यह 100% विश्वसनीय नहीं है। – keyboardP

+0

मैं नाम की तलाश में हूँ और – wajiw

+0

को संबोधित मैं इस में भी देख रहा था, मेरे ऐप उपयोगकर्ता उनका नाम, ईमेल और फ़ोन नंबर है, जो सभी स्पष्ट रूप से पहले से ही फोन में जमा हो जाती है में प्रवेश करने में शामिल है। मैं उन पृष्ठों को नहीं ढूंढ सकता जो मैं पढ़ रहा था लेकिन सबकुछ ने कहा कि उस जानकारी को प्राप्त करने के सभी तरीकों को हटा दिया जा रहा है और सुरक्षा कारणों से नए एपिस से बाहर निकाला जा रहा है। आप हमेशा से ही इसके लिए उपयोगकर्ता पूछ सकते हैं और 'SharedPreferences' में डेटा –

उत्तर

11

तो जवाब तकनीकी रूप से कोई। स्वामी के डेटा प्राप्त करने के लिए अब तक एकमात्र तरीका खाता प्रबंधक के माध्यम से है।

final AccountManager manager = AccountManager.get(this); 
final Account[] accounts = manager.getAccountsByType("com.google"); 
final int size = accounts.length; 
String[] names = new String[size]; 
for (int i = 0; i < size; i++) { 
    names[i] = accounts[i].name; 
} 

अधिक जानकारी के लिए देखें:: http://code.google.com/p/google-api-java-client/wiki/AndroidAccountManager

+0

" स्वामी "एंड्रॉयड में संपर्क जानकारी अद्यतन करने के लिए संभव है बचा सकता है? –

12

मैं पाया है एक बहुत ही आसान तरीका (4.1 संदेश सेवा ऐप्स की खुदाई से समझ में आ गया!)

प्रक्षेपण इसका इस्तेमाल करने के लिए का एक उदाहरण है कर्सर है के लिए

final String[] SELF_PROJECTION = new String[] { Phone._ID,Phone.DISPLAY_NAME, }; 

कर्सर है:

Cursor cursor = activity.getContentResolver().query(Profile.CONTENT_URI, SELF_PROJECTION, null, null, null); 

अब सिर्फ एक सरल

cursor.moveToFirst(): 

और फिर

cursor.getString(1) 

के माध्यम से

cursor.getString(0) 

और संपर्क नाम के माध्यम से संपर्क आईडी लाने और ..... आप कर रहे हैं किया हुआ!

+1

यह विधि केवल एंड्रॉइड 4.0 (एपीआई 14) या बाद में समर्थित है। इसलिए यदि आप केवल 20-25% उपकरणों पर इसका उपयोग करने की परवाह करते हैं, तो यह आपके लिए काम कर सकता है। – DanO

+1

@Daniel, अपनी टिप्पणी बार जब आप इसे लिखा था पर मोटे तौर पर सच था - लेकिन यह केवल करने वाले अधिक लोकप्रिय मिल रहा है। और दक्षिणी कोड एक इलाज करता है, जब तक आप इसे 'android.os.build.VERSION.SDK_INT> = android.os.build से घिराते हैं।VERSION_CODES.ICE_CREAM_SANDWICH'। इस प्रतिक्रिया पर पर्याप्त खोज प्रश्नों को पूरा किया गया है कि हमें भविष्य के लिए इसे बढ़ावा देना चाहिए! –

+0

ध्यान दें कि आपको '<उपयोग-अनुमति एंड्रॉइड: name =" android.permission.READ_PROFILE "/>' को अपने 'AndroidManifest.xml' में जोड़ने की आवश्यकता होगी, न कि आपको' SecurityException' – declension

6

हम क्या करना है:

1) उपयोगकर्ता समन्वयन खाता नाम (जो आमतौर पर गूगल ईमेल है)
2) इस ईमेल
3) इस संपर्क में आने से संपर्क डेटा प्राप्त करें के साथ संपर्क किताब से संपर्क जाओ जाओ

नहीं

भी सही के करीब है, और दो अतिरिक्त अनुमतियों की आवश्यकता - लेकिन कम से कम काम करता है।

यहाँ कोड है, संभव कोड अपडेट यहां हो सकता है: https://gist.github.com/3904299

import android.accounts.Account; 
import android.accounts.AccountManager; 
import android.app.Activity; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.provider.ContactsContract; 
import android.util.Log; 

public class OwnerInfo { 
    // this class allows to get device information. It's done in two steps: 
    // 1) get synchronization account email 
    // 2) get contact data, associated with this email 
    // by https://github.com/jehy 
    //WARNING! You need to have permissions 
    // 
    //<uses-permission android:name="android.permission.READ_CONTACTS" /> 
    //<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    // 
    // in your AndroidManifest.xml for this code. 

    public String id = null; 
    public String email = null; 
    public String phone = null; 
    public String accountName = null; 
    public String name = null; 

    public OwnerInfo(Activity MainActivity) { 
     final AccountManager manager = AccountManager.get(MainActivity); 
     final Account[] accounts = manager.getAccountsByType("com.google"); 
     if (accounts[0].name != null) { 
      accountName = accounts[0].name; 

      ContentResolver cr = MainActivity.getContentResolver(); 
      Cursor emailCur = cr.query(
        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
        ContactsContract.CommonDataKinds.Email.DATA + " = ?", 
        new String[] { accountName }, null); 
      while (emailCur.moveToNext()) { 
       id = emailCur 
         .getString(emailCur 
           .getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID)); 
       email = emailCur 
         .getString(emailCur 
           .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
       String newName = emailCur 
         .getString(emailCur 
           .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if (name == null || newName.length() > name.length()) 
        name = newName; 

       Log.v("Got contacts", "ID " + id + " Email : " + email 
         + " Name : " + name); 
      } 

      emailCur.close(); 
      if (id != null) { 

       // get the phone number 
       Cursor pCur = cr.query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
           + " = ?", new String[] { id }, null); 
       while (pCur.moveToNext()) { 
        phone = pCur 
          .getString(pCur 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        Log.v("Got contacts", "phone" + phone); 
       } 
       pCur.close(); 
      } 
     } 
    } 
} 
+0

तालिका से प्रोफ़ाइल जानकारी प्राप्त करना उपयोगी है। क्या प्रोफाइल जानकारी अपडेट करना संभव है? –

+0

@neerajkirola यदि आप उपयोगकर्ता के संपर्कों को अपडेट करना चाहते हैं - हाँ, यदि आपके पास संपर्कों को प्रबंधित करने की अनुमति है तो यह संभव है। अन्य प्रश्नों में इसकी चर्चा की गई है, उदाहरण के लिए http://stackoverflow.com/questions/10603187/modify-native-contact-programmatically – Jehy

+0

Android में "स्वामी" संपर्क जानकारी अपडेट करना संभव है? –

3

आइस क्रीम सैंडविच या बाद के लिए, का उपयोग कर

String[] columnNames = new String[] {Profile.DISPLAY_NAME, Profile.PHOTO_ID}; 

Cursor c = activity.getContentResolver().query(ContactsContract.Profile.CONTENT_URI, columnNames, null, null, null); 
int count = c.getCount(); 
boolean b = c.moveToFirst(); 
int position = c.getPosition(); 
if (count == 1 && position == 0) { 
    for (int j = 0; j < columnNames.length; j++) { 
     String name = c.getString(0)); 
     long photoId = c.getLong(1)); 
    } 
} 
c.close(); 
+2

प्रोफ़ाइल से मोबाइल नंबर कैसे प्राप्त करें? –

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