1. ホーム
  2. android

[解決済み] Androidの連絡先リストを呼び出すには?

2022-07-01 22:44:03

質問

Androidアプリを作成中で、電話の連絡先リストを呼び出す必要があります。連絡先リスト機能を呼び出して、連絡先を選び、その連絡先の名前で私のアプリに戻る必要があります。以下は、私がインターネット上で得たコードですが、それは動作しません。

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class Contacts extends ListActivity {

    private ListAdapter mAdapter;
    public TextView pbContact;
    public static String PBCONTACT;
    public static final int ACTIVITY_EDIT=1;
    private static final int ACTIVITY_CREATE=0;

    // Called when the activity is first created. 
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        Cursor C = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
        startManagingCursor(C);

        String[] columns = new String[] {People.NAME};
        int[] names = new int[] {R.id.row_entry};

        mAdapter = new SimpleCursorAdapter(this, R.layout.mycontacts, C, columns, names);
        setListAdapter(mAdapter);
    } // end onCreate()
    // Called when contact is pressed
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Cursor C = (Cursor) mAdapter.getItem(position);
        PBCONTACT = C.getString(C.getColumnIndex(People.NAME));

        // RHS 05/06
        //pbContact = (TextView) findViewById(R.id.myContact);
        //pbContact.setText(new StringBuilder().append("b"));

        Intent i = new Intent(this, NoteEdit.class);
        startActivityForResult(i, ACTIVITY_CREATE);
    }
}

どのように解決するのですか?

あなたのサンプル コードが何をすることになっているのか 100% はわかりませんが、次のスニペットは、「連絡先リスト関数を呼び出して連絡先を選び、その連絡先の名前で [あなたの] アプリに戻る」のに役立つはずです。

この処理には 3 つのステップがあります。

1. アクセス許可

アプリケーション マニフェストに連絡先データを読み取る権限を追加します。

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

2. コンタクトピッカーの呼び出し

アクティビティ内で、Contacts URIの項目からPICKアクションを実行できるアクティビティを探すようにシステムに依頼するIntentを作成します。

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

コール startActivityForResult を呼び出し、このIntent(とリクエストコードの整数)を渡します。 PICK_CONTACT を渡すことで、このIntent(と、この例ではリクエストコードの整数値)を指定します。これによって、Android は ACTION_PICK をサポートするように登録されたActivityが起動されます。 People.CONTENT_URI で、選択されると(あるいはキャンセルされると)、このActivityに戻る。

startActivityForResult(intent, PICK_CONTACT);

3. 結果を聴く

また、Activityで onActivityResult メソッドをオーバーライドして、ステップ2で起動した 'select a contact' Activity からのリターンをリッスンしてください。返ってきたリクエストコードが期待する値と一致しているか、また、結果コードが RESULT_OK .

選択されたコンタクトのURIを取得するために getData() を呼び出すことで取得できます。 データ インテンションパラメータで指定します。選択された連絡先の名前を取得するには、そのURIを使用して新しいクエリを作成し、返されたカーソルから名前を抽出する必要があります。

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
  super.onActivityResult(reqCode, resultCode, data);

  switch (reqCode) {
    case (PICK_CONTACT) :
      if (resultCode == Activity.RESULT_OK) {
        Uri contactData = data.getData();
        Cursor c =  getContentResolver().query(contactData, null, null, null, null);
        if (c.moveToFirst()) {
          String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
          // TODO Whatever you want to do with the selected contact name.
        }
      }
      break;
  }
}

ソースコード全文。 tutorials-android.blogspot.com (アンドロイドの連絡先リストを呼び出す方法) .