2

連絡先のリストから連絡先を選択するためのインテントフィルタを作成しようとしています(純粋な教育目的のために...私はインテントについて学んでいます)。暗黙のインテントでstartActivityを呼び出した後、アンドロイドは自分のカスタムアクティビティとデフォルトのアクティビティを候補アクティビティとして見つけ、使用したいアクティビティ(インテントの解決)を選択させます。Androidのインテントフィルタの問題

しかし、私の現在の設定では、アンドロイドのデフォルトの連絡先選択ツールが開きます。ここに私のインテントフィルターがあります。

<activity android:name=".ContactPicker" android:label="PICKER" > 
    <intent-filter> 
     <action android:name="android.intent.action.PICK" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="content" android:host="com.android.contacts" android:path="contacts" /> 
    </intent-filter> 
</activity> 

、ここで私が主な活動上の暗黙の意思を呼び出す午前方法です:

Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://com.android.contacts/contacts")); 
startActivityForResult(intent, PICK_CONTACT); 
+0

あなたがACTION_CHOOSERここに文書化され、HTTPを使用する必要があります://開発者を。 android.com/reference/android/content/Intent.html#ACTION_CHOOSER - 申し訳ありませんが、自分で使用する方法はわかりませんが、例としてGoogle検索を試してみてください。 – Squonk

+1

@MisterSquonk:これは、ユーザーがこの「Intent」のデフォルトハンドラを選択した場合に必要です。ビルトインの連絡先アプリはデフォルトであることが事前に決定されていると考えられますが、私がオーバーライドしようとした他の「インテント」(例えば、代替のホーム画面)。 – CommonsWare

答えて

4

試してみてください。

<intent-filter> 
    <action android:name="android.intent.action.PICK"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <data android:mimeType="vnd.android.cursor.dir/contact"/> 
</intent-filter> 
+0

ありがとう、それは働いた。 Uriのフィルタリングインテントがこのケースではうまくいかず、MIMEタイプでフィルタリングするのはなぜですか? – AlephNull

+0

@AlephNull:MIMEタイプを検索するためにコンテンツプロバイダのURIが使用されます。 'IntentFilter'文書を引用すると、"型は指定されていても型は指定されていないので、型がない(Mailto :)などのIntentだけが一致します; content:URIは常にMIME型コンテンツプロバイダによって提供されます。通常、MIMEタイプのコンテンツプロバイダフィルタに関連付けられたアクティビティ。さらに、この場合、Googleが行うことを行うことで、常に最良のサービスを提供できます。連絡先アプリケーションのソースコードを見て、上記のを得ました。 – CommonsWare

+0

素晴らしいです、私はあなたの助けに感謝します。最後の質問の1つは、連絡先アプリのソースコードはどこにありますか? – AlephNull