startActivityForResult を使用して連絡先を選択し、onActivityResult を使用して結果を取得したいと考えています。
Java android how to use contact pickerの例に従いました。
このコードは、連絡先ピッカーを正しく呼び出します。
addButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
Log.d(this.getClass().getName(), "Add button");
startActivityForResult(intent, PICK);
}
});
ただし、onActivityResult は呼び出されません。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
Log.d(this.getClass().getName(), "onActivityResult");
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK && resultCode == Activity.RESULT_OK)
{
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst())
{
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d(this.getClass().getName(), "Selected "+name);
}
}
} // onActivityResult
私の AndroidManifest.xml に問題があるのではないかと思っていました。私は READ_CONTACTS 権限を持っています。私はグーグルで検索し、このインテントフィルターを開始してアクティビティを待機するアクティビティに追加しましたが、これも違いはありませんでした。
<intent-filter>
<action android:name="android.intent.action.PICK"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="content" android:path="contacts"></data>
</intent-filter>
電話での動作では、ボタンを押すと連絡先リストが表示されますが、エントリを選択するとアプリケーションに制御が戻されません。
ジェームズ