Android 如何获取本地联系人帐户类型?

Android 如何获取本地联系人帐户类型?,android,Android,我正在尝试获取本地联系人帐户类型。下面是代码,它在三星设备上运行良好,但在索尼、micromax等设备上不起作用。请建议问题所在以及解决方法 public void GetDefaultAccountNameAndType() { String accountType = ""; String accountName = ""; long rawContactId = 0; Uri rawContactUri = null; ContentProviderResult[] results =

我正在尝试获取本地联系人帐户类型。下面是代码,它在三星设备上运行良好,但在索尼、micromax等设备上不起作用。请建议问题所在以及解决方法

public void GetDefaultAccountNameAndType() {
String accountType = "";
String accountName = "";

long rawContactId = 0;
Uri rawContactUri = null;
ContentProviderResult[] results = null;

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_NAME, null).withValue(RawContacts.ACCOUNT_TYPE, null).build());

try {
    results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch(Exception e) {
    e.printStackTrace();
} finally {
    ops.clear();
}

for (ContentProviderResult result : results) {
    rawContactUri = result.uri;
    rawContactId = ContentUris.parseId(rawContactUri);
}

Cursor c = getContentResolver().query(
        RawContacts.CONTENT_URI
        , new String[] {RawContacts.ACCOUNT_TYPE, RawContacts.ACCOUNT_NAME}
        , RawContacts._ID+"=?"
        , new String[] {String.valueOf(rawContactId)}
        , null);

if(c.moveToFirst()) {
    if(!c.isAfterLast()) {
        accountType = c.getString(c.getColumnIndex(RawContacts.ACCOUNT_TYPE));
        accountName = c.getString(c.getColumnIndex(RawContacts.ACCOUNT_NAME));
    }
}

getContentResolver().delete(rawContactUri, null, null);

c.close();
c = null;

System.out.println(accountType);
System.out.println(accountName);

//preference.setString("contactAccountType", accountType);
//preference.setString("contactAccountName", accountName);
public void GetDefaultAccountNameAndType(){
字符串accountType=“”;
字符串accountName=“”;
长rawContactId=0;
Uri rawContactUri=null;
ContentProviderResult[]结果=null;
ArrayList ops=新的ArrayList();
add(ContentProviderOperation.newInsert(RawContacts.CONTENT\u URI).withValue(RawContacts.ACCOUNT\u NAME,null).withValue(RawContacts.ACCOUNT\u TYPE,null.build());
试一试{
结果=getContentResolver().applyBatch(ContactsContract.AUTHORITY,ops);
}捕获(例外e){
e、 printStackTrace();
}最后{
ops.clear();
}
对于(ContentProviderResult:results){
rawContactUri=result.uri;
rawContactId=ContentUris.parseId(rawContactUri);
}
游标c=getContentResolver().query(
rawscontacts.CONTENT\u URI
,新字符串[]{rawscontacts.ACCOUNT_TYPE,rawscontacts.ACCOUNT_NAME}
,RawContacts._ID+“=?”
,新字符串[]{String.valueOf(rawContactId)}
,空);
if(c.moveToFirst()){
如果(!c.isAfterLast()){
accountType=c.getString(c.getColumnIndex(RawContacts.ACCOUNT_TYPE));
accountName=c.getString(c.getColumnIndex(RawContacts.ACCOUNT_NAME));
}
}
getContentResolver().delete(rawContactUri,null,null);
c、 close();
c=零;
系统输出打印项次(accountType);
System.out.println(accountName);
//preference.setString(“contactAccountType”,accountType);
//preference.setString(“contactAccountName”,accountName);

}

试试这个,它对索尼有效,但对三星无效。不知道为什么会这样。我也在研究同样的问题

/**
 * Get All Account available in Phone and add into list
 */
private void getAllAccounts() {
    int counter = 0;
    final AccountManager accManager = AccountManager
            .get(Activity.this);
    final Account accounts[] = accManager.getAccounts();

    for (int i = 0; i < accounts.length; i++) {
        Log.i(TAG, "Name " + accounts[i].name + ", Type "
                    + accounts[i].type);
    }
}
/**
*获取电话中的所有可用帐户并添加到列表中
*/
私有void getAllAccounts(){
int计数器=0;
最终AccountManager accManager=AccountManager
.得到(活动.这个);
决算账户[]=accManager.getAccounts();
对于(int i=0;i