可以在Android中获得"所有者"联系信息吗?

waj*_*jiw 8 android android-contacts

我还没有找到一个直接的答案.谁能告诉我是否有可能在Android应用程序中获取手机所有者的联系信息?

Dak*_*ksh 13

我找到了一个非常简单的方法(从挖掘到4.1 Messaging应用程序中获得它!)

光标投影是

final String[] SELF_PROJECTION = new String[] { Phone._ID,Phone.DISPLAY_NAME, };
Run Code Online (Sandbox Code Playgroud)

光标是:

Cursor cursor = activity.getContentResolver().query(Profile.CONTENT_URI, SELF_PROJECTION, null, null, null);
Run Code Online (Sandbox Code Playgroud)

现在只是做一个简单的

cursor.moveToFirst():
Run Code Online (Sandbox Code Playgroud)

然后通过获取联系人ID

cursor.getString(0)
Run Code Online (Sandbox Code Playgroud)

和联系人姓名

cursor.getString(1)
Run Code Online (Sandbox Code Playgroud)

并且.....你已经完成了!


waj*_*jiw 12

所以答案在技术上是否定的.到目前为止,我发现获取所有者数据的唯一方法是通过客户经理.以下是如何使用它的示例:

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;
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅:http://code.google.com/p/google-api-java-client/wiki/AndroidAccountManager


Jeh*_*lio 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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)