2

Я пытаюсь написать один контакт на SIM-карту.Android - Создать новый контакт с SIM-картой

Я отсканировал эти вопросы до сих пор: this,this,this,and this.

Я получил источник this nice library, но все же, я не вижу, экспортированные контакты из приложений. И что еще хуже, я заполнил одну из своих сим-карт без какой-либо возможности немного ее очистить, поэтому мне пришлось получить еще один.

Ничего не помогло.

Вот мой код:

Uri simUri = Uri.parse("content://icc/adn"); 
OR RawContacts.CONTENT_URI; 

SIM_ACCOUNT_NAME = "vnd.sec.contact.sim"; 
SIM_ACCOUNT_TYPE = "vnd.sec.contact.sim"; 



public static final void exportToSim(Context context, 
      List<Contact> listContacts) { 
     ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); 

     for (Contact contact : listContacts) { 
      if (contact.getPhones() == null) 
       continue; 
      if (contact.getPhones().isEmpty()) 
       continue; 
      /* Create empty contact */ 
      int backReference = operations.size(); 
      operations.add(ContentProviderOperation.newInsert(simUri) 
        .withValue(RawContacts.ACCOUNT_TYPE, SIM_ACCOUNT_TYPE) 
        .withValue(RawContacts.ACCOUNT_NAME, SIM_ACCOUNT_NAME) 
        .build()); 
      /* Add name Data */ 
      operations 
        .add(ContentProviderOperation 
          .newInsert(DATA_URI) 
          .withValueBackReference(Data.RAW_CONTACT_ID, 
            backReference) 
          .withValue(Data.MIMETYPE, 
            StructuredName.CONTENT_ITEM_TYPE) 
          .withValue(StructuredName.DISPLAY_NAME, 
            contact.displayName).build()); 
      /* Add phone data */ 
      for (Phone phone : contact.getPhones()) { 
       operations.add(ContentProviderOperation 
         .newInsert(DATA_URI) 
         .withValueBackReference(Data.RAW_CONTACT_ID, 
           backReference) 
         .withValue(Data.MIMETYPE, 
           CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
         .withValue(CommonDataKinds.Phone.NUMBER, phone.number) 
         .withValue(CommonDataKinds.Phone.TYPE, 
           CommonDataKinds.Phone.TYPE_MOBILE).build()); 
      } 
     } 

     try { 
      context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, 
        operations); 
     } catch (RemoteException e) { 
      Log.e(e.getClass().getSimpleName(), e.getMessage()); 
     } catch (OperationApplicationException e) { 
      Log.e(e.getClass().getSimpleName(), e.getMessage()); 
     } 
    } 

В случае simUri равной Uri.parse ("Содержание: // МЦХ/ADN") сбой приложения с UnsupportedOperationException,

В случае simUri, равный контакту RawContacts.CONTENT_URI, написан в таблице RawCts, и он помечен как контакт от sim, но после перезагрузки я не вижу контакта нигде. Кажется, что он не был написан прямо на SIM-карте.

Значения SIM_ACCOUNT_TYPE/NAME отражают ту же самую пару типа/имя учетной записи cts, экспортированную системным приложением.

Манифест приложения содержит оба разрешения: READ и WRITE _CONTACTS

Пожалуйста, помогите. Какой код следует использовать для правильного написания контакта на SIM-карте?

Спасибо всем, кто отвечает.

+0

Здравствуйте. Вы решили свою проблему? –

+0

@UnknownJoe проверить мой ответ – moDev

ответ

0

Создать новую сим-контакт, используя ниже код

void insertSIMContact() { 

Uri simUri = Uri.parse("content://icc/adn"); 

ContentValues values = new ContentValues(); 
values.put("tag","Mitesh"); 
values.put("number", "1234"); 

getContentResolver().insert(simUri, values); 
getContentResolver().notifyChange(simUri, null); 

} 
+0

Я пробовал это, но он не работал должным образом @moDev –