Je n'ai pas été capable de trouver une réponse directe à ce sujet. Quelqu'un peut-il me dire s'il est possible d'obtenir les informations de contact du propriétaire du téléphone dans une application Android? P>
5 Réponses :
La réponse est donc techniquement no. La seule façon dont j'ai trouvé jusqu'à présent pour que les données du propriétaire soient via le gestionnaire de comptes. Voici un exemple de comment l'utiliser: pour plus d'informations voir: http://code.google.com/p/google-api-java-client/wiki/androïdaccountmanager P> P>
Est possible de mettre à jour les informations de contact "propriétaire" dans Android?
J'ai trouvé un moyen très facile (de creuser dans l'application de messagerie 4.1!)
Projection pour le curseur est P>
cursor.getString(1)
Cette méthode n'est prise en charge que dans Android 4.0 (API 14) ou ultérieure. Donc, si vous ne vous souciez que de l'utiliser sur 20-25% des périphériques, cela peut alors fonctionner pour vous.
@Daniel, votre commentaire était largement vrai au moment où vous l'avez écrit - mais ça va devenir plus populaire. Et le code de Daksh fonctionne un régal, tant que vous l'entourez avec android.os.build.version.sdk_int> = android.os.build.version_codes.ice_cream_sandwich code>. Assez de recherches sur cette réponse que nous devrions la promouvoir pour l'avenir!
Notez que vous devrez ajouter
androidmanifest.xml code> de peur que vous soyez frappé par < Code> SecurityException Code>
Est possible de mettre à jour les informations de contact "propriétaire" dans Android?
Cela nécessite le droit lecture_contacts. Étant donné que les applications nécessitant cette permission sont Dubios, ce n'est pas une bonne solution. En fait, le droit de lire tous les contacts ne doit pas être nécessaire pour lire le nom uniquement du propriétaire du téléphone.
Est-ce que je comprends correctement que le champ Phone._id sera équivalent à contactsContract.Contact.Contact_id pour le contact de profil?
Ce que nous devons faire:
1) Obtenez un nom de compte de synchronisation utilisateur (qui est généralement le courrier électronique de Google)
2) Obtenir le contact du livre de contact avec cet email
3) Obtenir des données de contact à partir de ce contact p>
pas même près de Parfait et nécessite deux autorisations supplémentaires - mais au moins des travaux. P>
Voici le code, les mises à jour de code possibles peuvent être ici: https://gist.github.com/3904299 p>
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(); } } } }
Il est utile de recevoir des informations de profil de la table. Est-il possible de mettre à jour les informations sur le profil?
@Neerajkirola Si vous voulez dire mettre à jour les contacts de l'utilisateur - Oui, il est possible que vous ayez la permission de gérer les contacts. Il est discuté dans d'autres questions, par exemple Stackoverflow.com/questions/10603187 / ...
Est possible de mettre à jour les informations de contact "propriétaire" dans Android?
@NEERAJKIROLA C'est juste un autre contact dans les contacts de l'utilisateur, pourquoi pas.
Merci de répondre continu à ma requête ... Pourriez-vous mettre ce code ici pour mettre à jour le profil du propriétaire (nom, numéro de contact, etc.) Merci beaucoup !!
@NEERAJKIROLA Ceci est Offtopic, mais vous pouvez vérifier ce code: Stackoverflow.com / Questions / 9907751 / Android-Update-A-Contact
pour Sandwich à la crème glacée ou plus tard, en utilisant
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();
de l'API 23 et au-dessus, vous devez ajouter une autorisation appropriée dans Manifest,
String[] columnNames = new String[] {ContactsContract.Profile.DISPLAY_NAME, ContactsContract.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 < count; j++) { String name = c.getString(c.getColumnIndex(ContactsContract.Profile.DISPLAY_NAME)); String photoID = c.getString(c.getColumnIndex(ContactsContract.Profile.PHOTO_ID)); Log.i("MainActivity", "name: " + name); Log.i("MainActivity", "photoID: "+ photoID); } } c.close()
Voulez-vous dire le numéro de téléphone? Si tel est le cas, vous pouvez utiliser getline1Number ( développeur.android. com / référence / Android / Téléphonie / ... ) Bien que ce ne soit pas 100% fiable.
Je cherche le nom et l'adresse
Je cherchais cela aussi, mon application implique que l'utilisateur entrant dans son nom, son email et son numéro de téléphone, qui sont tous évidemment stockés dans le téléphone déjà. Je ne trouve pas les pages que je lisais mais tout a dit que toutes les méthodes d'obtention de cette information étaient / sont obsolètes et retirées des nouvelles API pour des raisons de sécurité. Vous pouvez toujours simplement demander à l'utilisateur et enregistrer les données dans
SharedPreferences code>