4

電話の通話記録をListViewに照会します。したがって、ユーザーがアイテムを長押しすると、「連絡先の表示」などのオプションがダイアログに表示されます。連絡先を表示できるようにするには、インテントに連絡先IDが必要です。私の問題は、私が常に正しい連絡先を見ることができるとは限らないということです。Peterをクリックすると、Peterのコンタクトシートが表示されます。サラをクリックすると、ジェイソンのコンタクトシートが表示されます。

私はこのコードを間違った方法で使用していたに違いありません。助けてください。

ContentResolver contentResolver = getContentResolver();

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phone));

Cursor cursor =  contentResolver.query(uri, new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, null, null, null);

if(cursor!=null) {
      while(cursor.moveToNext())
      {
        String contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
        contactid2 = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID));
        }
        cursor.close();
}

Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + contactid2));
 startActivity(intent_contacts);

たぶん私が必要としているのはPhoneLookup._IDではなく、他のIDです。

私もここでフェリペの答えを試しました、同じことが起こります。

編集:

  • HTC Desire HD(2.3.5)では、99%のケースで適切な連絡先を取得しています。
  • ZTE Blade(2.2)の場合60%のケースで適切な連絡先を取得します。
  • サムスンギャラクシーエース(2.3.3)で私はケースの5%で適切な連絡先を取得します。

一体何が起こっているのか?

4

2 に答える 2

4

テーマを掘り下げた後、私はgooglegroupsでsvenの助けを見つけました。問題は、私が非難された意図を使用していたことでした。私は開発者サイトの多くのページを読みましたが、どういうわけかそれを見逃したに違いありません。

完全なコードも投稿します。

contactid26 = null;

ContentResolver contentResolver = getContentResolver();

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phonenumintolist));

Cursor cursor =  
contentResolver.query(
    uri, 
    new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, 
    null, 
    null, 
    null);

    if(cursor!=null) {
        while(cursor.moveToNext()){
            String contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
            contactid26 = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID));

        }
        cursor.close();
    }
    if (contactid26 == null) {
        Toast.makeText(DetailedCallHistory.this, "No contact found associated with this number", Toast.LENGTH_SHORT).show();
    }
    else {
        Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactid26)));
        //Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + contactid26));
        startActivity(intent_contacts);
    }
于 2012-06-06T18:16:36.813 に答える
1

この場合、IDを取得する方法と、入力して検索したい連絡先番号の名前を示します。たとえば、noを入力してその名前とIDを検索する場合は、次を使用します。このコード、それは100%動作しています、これでさらに変更が必要な場合は、私に言うことができます

         Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phnno.getText().toString()));//phone no 
         String[] proj = new String[] 
           {///as we need only this colum from a table...
             Contacts.DISPLAY_NAME,
             Contacts._ID,
            };
         String id=null;
         String sortOrder1 = StructuredPostal.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
         Cursor crsr = getContentResolver().query(lookupUri,proj, null, null, sortOrder1);
     while(crsr.moveToNext())
     {
         String name=crsr.getString(crsr.getColumnIndex(Contacts.DISPLAY_NAME));
          id = crsr.getString(crsr.getColumnIndex(Contacts._ID));
          Toast.makeText(this,"Name of this cntct is   : " +name +"\n id is : "+id ,Toast.LENGTH_SHORT).show();
     }
    crsr.close();
于 2012-10-13T23:22:14.233 に答える