2017-08-25 170 views
0

我試圖添加聯繫人到SIM卡,他們似乎被添加到SIM卡,但他們只有在重新啓動設備後纔可見(即使是原生人的應用程序)。將聯繫人添加到SIM卡

這裏是代碼我使用:

final Uri uri = Uri.parse("content://icc/adn"); 
ContentValues mContentValue = new ContentValues(); 
mContentValue.put("tag", contactName); 
mContentValue.put("number", contactNumber); 
getContentResolver().insert(uri, mContentValue); 

是它與創建聯繫人同步中後接觸dB的問題呢?如果是這樣,有沒有辦法可以強制android將聯繫人的數據庫與SIM卡同步?


編輯

好吧,我還是想說明我的問題。這裏是人,有同樣的問題,但沒有任何答案(when adding contacts to sim card, they are only displayed after rebooting the device),所以我需要再問一次。
ACCOUNT_TYPE:com.android.contacts.simACCOUNT_NAME:SIM對我的手機有誤。我從得到正確的聯繫方式.Contract.Settings.CONTENT_URIcom.android.huawei.phone - 電話com.android.huawei.sim - sim1。 這裏是我的代碼:

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

Uri simUri = Uri.parse("content://icc/adn"); 
ContentValues values = new ContentValues(); 
values.put("tag", "NAME"); 
values.put("number", "77777777777"); 
try { 
    Uri uri = context.getContentResolver().insert(simUri, values); 

    int efid = 0,index = 0; 
    Pattern pattern = Pattern.compile("^content://icc/adn/(\\d+)/(\\d+)$*"); 
    Matcher matcher = pattern.matcher(uri.toString()); 
    if(matcher.matches()) { 
     index = Integer.parseInt(matcher.group(1)); 
     efid = Integer.parseInt(matcher.group(2)); 
    } 

    ArrayAdapterSpinner.Item item = adapter.getItem(spinner.getSelectedItemPosition()); 

    op.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.android.huawei.sim") 
      .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "sim1") 
      .withValue(ContactsContract.RawContacts.SYNC1,efid) 
      .withValue(ContactsContract.RawContacts.SYNC2,index) 
      .build()); 
    op.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "NAME") 
      .build()); 
    op.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "77777777777") 
      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) 
      .build()); 

    try { 
     ContentProviderResult[] cprs = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, op); 
    } catch (Exception e) { 
     Log.e("ERROR", e.getMessage()); 
    } 
} catch(Exception e) { 
    Log.e("ERROR2", e.toString()); 
} 

但是結果是:
1.聯繫在ICC/ADN創建
2. RawContacts聯繫被創建,但ACCOUNT_TYPEACCOUNT_NAME被替換爲com.android.huawei.phone - 電話

回答

0

Ma ybe它可以幫助

try{ 
       // add a row to the RawContacts table 
     ContentValues values = new ContentValues(); 
     values.put(RawContacts.ACCOUNT_TYPE, "com.android.contacts.sim"); 
     values.put(RawContacts.ACCOUNT_NAME, "SIM"); 
     Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); 

     // get the ID of the newly-added line 
long rawContactId = ContentUris.parseId(rawContactUri); 

     // add a "name" line to the Data table, linking it to the new RawContact 
     // with the CONTACT_ID column 
values.clear(); 
values.put(Data.RAW_CONTACT_ID, rawContactId); 
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 
values.put(StructuredName.DISPLAY_NAME, "Name"); 
cr.insert(Data.CONTENT_URI, values); 
    getContentResolver().notifyChange(Uri_Here,null); 
     // add a "phone" line to the Data table, linking it to the new RawContact 
     // with the CONTACT_ID column 
values.clear(); 
values.put(Data.RAW_CONTACT_ID, rawContactId); 
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 
values.put(Phone.NUMBER, "+12345678901"); 
values.put(Phone.TYPE, Phone.TYPE_MOBILE); 
cr.insert(Data.CONTENT_URI, values); 
getContentResolver().notifyChange(Uri_Here,null); 
//New Edit 
} 
catch(Exception e){ 
    //exception handling 
} 
+0

Erhm ...我的錯誤。我已經重新解釋了我的問題。檢查我的編輯 –

+0

檢查我新編輯.... getContentResolver()。notifyChange(simUri,null);添加這個,以便它立即出現。 – Sahil

+0

它似乎沒有工作......我添加了「icc/adn」的聯繫方式並通知了「icc/adn」uri的更改。結果:聯繫人已添加到「icc/adn」,但未顯示在設備存儲中。 –