0

accountTypeアプリケーションから連絡先を挿入しようとしていますが、次のようにandの値を特定できませんaccountName

ContentValues values = new ContentValues();
values.put(RawContacts.ACCOUNT_TYPE, accountType);
values.put(RawContacts.ACCOUNT_NAME, accountName);
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);


values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.DISPLAY_NAME, "Mike Sullivan");
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,"1-800-111-411");
getContentResolver().insert(Data.CONTENT_URI, values);

また、 と で次の変更を加えてこのコードを実行しようとするaccountTypeaccountName、連絡先に表示されません。

values.put(RawContacts.ACCOUNT_TYPE, "acc_type");
values.put(RawContacts.ACCOUNT_NAME, "acc_name");

"Mike Sullivan"しかし、電話番号なしで連絡先を検索すると、いくつかの値が挿入されるようです。助けてください

4

2 に答える 2

2

以下は連絡先データベースを追加するコードで、連絡先が追加されたかどうかも返します::::

//to save contact in Database
public boolean SaveContact(Activity _activity,String name,String number) {
    String MIMETYPE_RADUTOKEN   = "vnd.android.cursor.item/radutoken";
    String  szname = name,szMobile = number;
    //Create a new contact entry!
    String szToken = String.format("RADU_TOKEN_%d", System.currentTimeMillis());
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    int rawContactInsertIndex = ops.size();

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

    //INSERT NAME
    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, szname).build());

    //INSERT PINLESSMAX MOBILE NUMBER
    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,   rawContactInsertIndex).withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, szMobile).withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM).withValue(ContactsContract.Data.DATA3, "PinLessMax").build());

    // SAVE CONTACT IN BCR Structure
    Uri newContactUri = null;
    //PUSH EVERYTHING TO CONTACTS
    try{
       ContentProviderResult[] res = _activity.getContentResolver().applyBatch(ContactsContract.AUTHORITY,ops);
      if (res!=null && res[0]!=null) {
         newContactUri = res[0].uri;    
     }
    }catch (RemoteException e) { 
        // error
        newContactUri = null;
    }  catch (OperationApplicationException e)   {
        // error
         newContactUri = null;
    }  
    if (newContactUri == null) {
        return false;
     }
    boolean foundToken = false;

  // IDENTIFY Contact based on name and token
    String szLookupKey = "";
    Uri lkup = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, szname);
    ContentResolver cr = _activity.getContentResolver();
    Cursor idCursor = _activity.getContentResolver().query(lkup, null, null, null, null);
    // get all the names 
    while (idCursor.moveToNext()) {
        String szId = idCursor.getString(idCursor.getColumnIndex(ContactsContract.Contacts._ID));
        String szName = idCursor.getString(idCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        szLookupKey = idCursor.getString(idCursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
       // for this contact ID, search the custom field
       String tokenWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
      String[] tokenWhereParams = new String[]{szId, MIMETYPE_RADUTOKEN}; 
      Cursor tokenCur = cr.query(ContactsContract.Data.CONTENT_URI, null, tokenWhere, tokenWhereParams, null); 
      while (tokenCur.moveToNext()) {
         String token = tokenCur.getString(tokenCur.getColumnIndex(ContactsContract.Data.DATA1));
        // CHECK THE TOKEN!
        if (szToken.compareTo(token) == 0) {
          tokenCur.close();
          foundToken = true;
          break;
        }   
       } 
      tokenCur.close();
      if (foundToken) break;
  }
  idCursor.close();
  return true;
}//SaveContact()
于 2012-04-22T03:02:58.360 に答える
0

特定のアカウントで連絡先を作成したくない場合は、アカウントタイプとアカウント名にnull値を指定できます

values.put(RawContacts.ACCOUNT_TYPE, null);
values.put(RawContacts.ACCOUNT_NAME, null);

ほとんどのデバイスでは、デフォルトの電話連絡先として作成されます。

デバイスで利用可能なすべてのアカウントタイプを知りたい場合は、次のコードを使用できます

Account[] accountList = AccountManager.get(this).getAccounts();
for(int i = 0 ; i < accountList.length ; i++) {
  System.out.println(accountList[i].type);
}

注:OEMが異なれば、アカウントタイプに異なる名前が使用されます。

于 2012-04-22T01:18:09.473 に答える