0

私は現在、アンドロイドの連絡先を読み取り専用にしています。以下は私が使用しているコードです:

String[] projecao = new String[] { Contacts._ID,
    Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME };
String selecao = Contacts.HAS_PHONE_NUMBER + " = 1";
Cursor contatos = contexto.getContentResolver().query(
    ContactsContract.Contacts.CONTENT_URI, projecao, selecao, null, null);

電話番号を取得するには:

Cursor phones = contexto.getContentResolver().query(
                Phone.CONTENT_URI,
                new String[] { Phone.NUMBER },
                Phone.CONTACT_ID + " = ?",
                new String[] { contatos.getString(contatos
                        .getColumnIndex(Contacts._ID)) }, null);

番号を持つすべての連絡先のデータベースを維持したいと考えています。

SIMカードの連絡先も取得するにはどうすればよいですか?

お時間をいただきありがとうございます。

4

2 に答える 2

0

あなたが読んでいる連絡先は、Android プラットフォームの一部である連絡先プロバイダーからのものです。これらは読み取り専用ではありませんが、変更を試みる前にドキュメントを読む必要があります。

SIMカードの接点が全然違います。それらは SIM カード自体に別々に保存されており、おそらく携帯電話メーカーまたはサービス プロバイダーのアプリを使用してアクセスする必要があります。Google コンタクトとは何の関係もありません。彼らとは何もしないことをお勧めします。

于 2012-11-27T00:37:30.323 に答える
0

まず、連絡先ごとに phone-query を実行するのは非常に非効率的であり、多くの連絡先があるデバイスではコードが数分 (!!) 実行される可能性があります。

1 つのクイック クエリで必要なすべての情報を取得するコードを次に示します。

class Contact {
    Long id;
    String name;
    String lookupKey;
    List<String> phones = new ArrayList<>();

    public Contact(Long id, String name, String lookupKey, String number) {
        this.id = id;
        this.name = name;
        this.lookupKey = lookupKey;
        this.phones.add(number);
    }
}

Map<Long, Contact> contacts = new HashMap<Long, PhoneContact>();

String[] projection = {Data.CONTACT_ID, Data.DISPLAY_NAME, Data.LOOKUP_KEY, Phone.NUMBER};
String selection = Data.MIMETYPE + " IN ('" + Phone.CONTENT_ITEM_TYPE + "')"; 

Cursor cur = cr.query(Data.CONTENT_URI, projection, selection, null, null);

while (cur.moveToNext()) {
    long id = cur.getLong(0);
    String name = cur.getString(1);
    String lookup = cur.getString(2);
    String number = cur.getString(3)

    if (!contacts.containsKey(id)) {
        Contact newContact = new Contact(id, name, lookup, number);
        contacts.put(id, phoneContact);
    } else {
        Contact existingContact = contacts.get(id);
        existingContact.phones.add(number);
    }
}
cur.close();

SIM の連絡先に関しては、それらは既に同じデータベースに保存されており、ContactsContract を介してアクセスできます。つまり、SIM に保存されているすべての電話も上記のコードで受信する必要があります。

SIM 連絡先のみを照会する場合は、ここで私の回答を参照してください: https://stackoverflow.com/a/49624417/819355

于 2021-04-18T07:47:00.977 に答える