0

連絡先から携帯電話番号を取得したい (SMS を送信したい)。ここに私のコード:

//Selecting the contact
        Button buttonPickContact = (Button)findViewById(R.id.pickcontact);
        buttonPickContact.setOnClickListener(new Button.OnClickListener(){

            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                startActivityForResult(intent, RQS_PICK_CONTACT);
            }});


@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        Cursor cursor = null;
        mName.setText(context.getString(R.string.not_available));
        mNumber.setText(context.getString(R.string.not_available));

        if(requestCode == RQS_PICK_CONTACT && resultCode == RESULT_OK && data != null){
            Log.d(TAG, "requestCode, resultCode, data ok"); 
            Uri uri = data.getData(); 
            try{
                String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER};
//              cursor =  getContentResolver().query(uri, projection, null, null, null);
                cursor =  getContentResolver().query(uri, null, null, null, null);
                cursor.moveToFirst();
                Log.d(TAG, "Trying to retrieve the name and the number"); 
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                String hasNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER)); 

                Log.d(TAG, "hasNumber "+hasNumber); 
                mName.setText(name);

                if(hasNumber.trim().equals("1")){
                    Log.d(TAG, "contact has telephone number"); 
                    //set name and number
                    String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    mNumber.setText(phoneNumber);
                }

            }catch(Exception ex){
                CharSequence text = context.getString(R.string.cannot_choose_contact); 
                Toast toast = Toast.makeText(context, text, duration);
                toast.show();
            }
            if(cursor!= null && !cursor.isClosed()){
                cursor.close(); 
            }
        }else{
            CharSequence text = context.getString(R.string.cannot_choose_contact); 
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
        }
    }

私は取得しています: CursorWindow から行 0、列 -1 を読み取れませんでした...

電話番号を取得するにはどうすればよいですか? 右側の列から取得しようとしていますか?

ご回答ありがとうございます。

4

2 に答える 2

1

連絡先の詳細データは、メインの連絡先自体とは別の表に含まれています(詳細については、Contacts APIガイドを参照してください)。SMSを送信しているので、電話番号が関連付けられている連絡先のみを取得する方が便利な場合があります。そのため、電話番号が含まれているテーブルに直接アクセスすることをお勧めします。URIには、次のものを使用します。

CommonDataKinds.Phone.CONTENT_URI

そうすれば、心配する必要はありませんHAS_PHONE_NUMBER。一見すると、コードの残りの部分は正しく、または非常に近くに見えます。元のパスを続行する場合は、とにかくこのテーブルに対して別のクエリを実行する必要がありますが、最初に見つけた連絡先のIDを指定してください。

于 2013-02-22T19:45:18.117 に答える