2

単一の連絡先を SIM カードに書き込もうとしています。

これまでのところ、これらの質問をスキャンしました: これ、 これ、 これ、 およびこれ。

この素敵なライブラリのソースを入手しましたが、アプリからエクスポートされた連絡先が表示されません。さらに悪いことに、SIM カードの 1 つをいっぱいにしてしまったので、それを少しクリアすることはできなかったので、別の SIM カードを入手する必要がありました。

何も助けませんでした。

これが私のコードです:

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());
        }
    }

Uri.parse("content://icc/adn") と等しい simUri の場合、UnsupportedOperationException でアプリケーションがクラッシュします。

RawContacts.CONTENT_URI に等しい simUri の場合、RawCts テーブルに連絡先が書き込まれ、sim からの連絡先としてマークされますが、リロード後にどこにも連絡先が表示されません。SIMに直接書き込まれていないようです。

SIM_ACCOUNT_TYPE/NAME の値は、cts からの同じアカウント タイプ/名前のペアを反映し、システム アプリケーションによってエクスポートされます。

アプリのマニフェストには、READ と WRITE _CONTACTS の両方の権限が含まれています。

助けてください。連絡先を SIM カードに正しく書き込むには、どのコードを使用すればよいですか?

応答してくれた人に感謝します。

4

1 に答える 1