8

私の目標は、電話番号が記載された連絡先のみをユーザーに表示し、ユーザーがローカルに保存する連絡先をいくつか選択できるようにすることです。

以下のメソッドで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);
              }
           });
    }

上記のメソッドのパラメーターとしてContactsContract.Contacts.CONTENT_URIを渡し、以下のハンドラーメソッドの場合、クエリメソッドのString []をプロジェクションパラメーター(コメント付きで表示)として渡すと、メソッドは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プラットフォームをあまり使用しておらず、特定の細かい部分を見逃している可能性があります。これを実現する簡単な方法があるはずです。

親切に提案します。あなたの助けに感謝。

ありがとう。

4

5 に答える 5

19

以下のコードを使用してください

Intent intent = new Intent(Intent.ACTION_PICK,  ContactsContract.Contacts.CONTENT_URI);
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(intent, 1);
于 2013-03-01T09:07:40.707 に答える
3
*-> 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*
于 2016-02-10T11:52:39.583 に答える
1
Uri uri = Uri.parse("content://contacts");
Intent intent = new Intent(Intent.ACTION_PICK, uri);
intent.setType(Phone.CONTENT_TYPE);
startActivityForResult(intent, REQUEST_CODE);
于 2015-03-20T08:11:30.297 に答える
1

次のコードは、あなたが望むことを行います。

Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(Intent.createChooser(intent, "Contact"), PICK_CONTACT);
于 2014-10-16T18:26:24.790 に答える
0

これを使って:

Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people"));
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, 1);
于 2016-01-02T11:59:40.830 に答える