2013-03-01 13 views
7

私の目標は、電話番号の連絡先をユーザーに表示し、ユーザーがローカルに保存する連絡先をほとんど選択しないようにすることです。AndroidデバイスのACTION_PICKインテントを使用して電話番号だけの連絡先を表示

以下のメソッドでは、ContactsContract.Contacts.CONTENT_URIの代わりにさまざまなオプションを使用しています。しかし、私はたくさんの連絡先(多くは電子メールIDだけの迷惑メールです)が表示されています。

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.contact_selector); 

     ((Button)findViewById(R.id.btnphonecontactlist)).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(contactIntent, 1); 
       } 
      }); 
    } 

Iは、上記の方法のパラメータとしてContactsContract.Contacts.CONTENT_URIを渡すハンドラメソッド以下の場合には、文字列[](コメント示されている)投影パラメータとしてクエリメソッドの、メソッドが失敗した場合でjava.lang.IllegalArgumentException。私が下のメソッドでnullを渡すと、私が選択した連絡先が何であれ、電話番号や電子メールに関連する列は見つかりません。

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if(data != null) 
     { 
      Uri uri = data.getData(); 

      if(uri != null) 
      { 
       Cursor c = null; 

       try 
       { 
        c = getContentResolver().query(uri, null 
               // new String[] { 
          //ContactsContract.CommonDataKinds.Phone.NUMBER, 
          //ContactsContract.CommonDataKinds.Phone.TYPE}, 
          , null, null, null); 

        if(c != null && c.moveToFirst()) 
        { 
         String number = c.getString(0); 
         String type = c.getString(1); 
        }    
       } 
       finally 
       { 
        if(c != null && !c.isClosed()) 
         c.close(); 
       } 
      } 
     } 
    } 

、ユーザが電話帳になり、利用可能な電話番号を持っているとき、通常、ユーザーに見える唯一の連絡先を表示する方法はありますか?

私はstackoverflowや他のサイトのすべてのスレッドを通過しようとしましたが、多くの人が問題を投稿していますが、この問題を解決するソリューションは見つかりませんでした。私はAndroidプラットフォームではあまり仕事をしていないし、細かい部分を見逃しているかもしれないし、これを達成するための簡単な方法が必要だと思う。

お勧めです。あなたの助けに感謝。

ありがとうございました。

+0

は私のANSは助けたのですか? –

答えて

18

コードは、あなたがやりたいだろう次のコード

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
    startActivityForResult(intent, 1); 
+0

良い。+あなたの努力のために+1が必要です –

+0

ありがとうございます。出来た。私はちょうど基本の多くを読まずにコーディングに飛びついた。私はContactsContract.Contacts.CONTENT_TYPEを使用しましたが、今は他のオプションとそれらの違いがあります。 – Jit

+1

連絡先に返された電子メール情報は表示されませんでしたが、家庭、携帯電話番号、電子メールなどすべての連絡先関連情報を表示できる文字列パラメータはありませんか? – Jit

1

の下に使用してください。

Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
startActivityForResult(Intent.createChooser(intent, "Contact"), PICK_CONTACT); 
1
Uri uri = Uri.parse("content://contacts"); 
Intent intent = new Intent(Intent.ACTION_PICK, uri); 
intent.setType(Phone.CONTENT_TYPE); 
startActivityForResult(intent, REQUEST_CODE); 
0

使用この:

Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people")); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(intent, 1); 
2
*-> Add a permission to read contacts data to your application manifest. 

<uses-permission android:name="android.permission.READ_CONTACTS"/> 

-> Use Intent.ACTION_PICK in your Activity 

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
     startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 

-> Then Override the onActivityResult() and retrieve the ID,Phone number and Name in the data. 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // check whether the result is ok 
     if (resultCode == RESULT_OK) { 
      // Check for the request code, we might be usign multiple startActivityForReslut 
      switch (requestCode) { 
      case RESULT_PICK_CONTACT: 
       Cursor cursor = null; 
     try { 
      String phoneNo = null ; 
      String name = null;   
      Uri uri = data.getData();    
      cursor = getContentResolver().query(uri, null, null, null, null); 
      cursor.moveToFirst();   
      int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      phoneNo = cursor.getString(phoneIndex); 

      textView2.setText(phoneNo); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
       break; 
      } 
     } else { 
      Log.e("MainActivity", "Failed to pick contact"); 
     } 
    } 

This will work check it out* 
関連する問題