1

連絡先リストにある一部の人の電話番号を抽出する際に問題が発生しています。

最初に、すべての連絡先をリストビューに表示します。

String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER
    };

mCursor = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            projection, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] {mContactId}, null);

アイテムをクリックすると、これが contact_id を取得する方法です。

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
        Cursor currentCursor = mContactsAdapter.getCursor();

    if (currentCursor != null) {
        notifyOnContactSelectedListeners(String.valueOf(id));
    }
}

次に、新しいフラグメントを作成し、読み込み中に連絡先の電話番号と表示名を照会します。

if (cursor != null && cursor.getCount() > 0) {

        cursor.moveToFirst();

        String firstName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    }

電話を持っている人の場合、私はこの方法で電話番号を取得しますが、それで問題ありません。しかし、この方法で電話番号を取得できない人もいますが、デフォルトの電話帳に電話番号が登録されています。

何が悪かったのか?

4

3 に答える 3

0

これを試してみてください

パブリッククラスContactextendsActivityはOnItemClickListener{を実装します

private static final int PICK_CONTACT = 0;
Cursor c;
Cursor cursor,phones,emails,address;
String id,phoneNo,name;
String[] from;
int[] to;
ListView lv;
Cursor cur,pCur;
List<String> list1 = new ArrayList<String>();

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.contact);
  lv = (ListView)findViewById(R.id.contactlist);
  displayContacts();
  lv.setAdapter(new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1, list1)); 
  lv.setOnItemClickListener(this);
}

private void displayContacts() {

    ContentResolver cr = getContentResolver();
   cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, null);
    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
             name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            if (Integer.parseInt(cur.getString(
                    cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                  pCur = cr.query(
                         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                         null, 
                         ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                         new String[]{id}, null);
                 while (pCur.moveToNext()) {
                     phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                 // setContact(name,phoneNo);
                     System.out.println("name"+name+"ph no"+phoneNo);
                     list1.add(name+"\n"+phoneNo);
            //       Toast.makeText(this, "Name: " + name + ", Phone No: " + phoneNo, Toast.LENGTH_SHORT).show();


                 } 

            pCur.close();
          }
        }
    }




}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub
    String s = lv.getItemAtPosition(arg2).toString();

    Log.i("my msg", s.substring(0, s.indexOf("\n")));

    Toast.makeText(this, s.substring(s.indexOf("\n")+1,s.length() ),1 ).show();
}  

}

于 2012-10-05T13:59:31.040 に答える
0

私も同様の困難を抱えていました。受信できなかった番号はすべて、リンクされた Facebook アカウントからインポートされたものであることがわかりました。連絡先が存在し、実際に電話番号を持っていることを検出できます。ただし、SQL クエリでこの番号を取得しようとすると、返される結果は になりますnull

セキュリティ上の理由から、Facebook が連絡先へのアクセスを制限していることが明らかになりました。電話番号を非表示にする別のプロバイダー (LinkedIn、Google など) をまだ見つけていません。

さらに読む: RawContacts で Facebook の連絡先が見つからない

于 2012-08-19T11:58:41.350 に答える
0

いくつかの連絡先で受け取りnullました。

コードを確認して、使用していた電話番号を照会するときに、Android docsに従ってContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER変更したことを確認しました。ContactsContract.CommonDataKinds.Phone.NUMBER

ユーザーが入力した電話番号。

そしてコードはうまくいきました。

于 2017-02-10T19:37:19.233 に答える