我正在尝试为联系人设计广播接收器,这意味着当其他应用或用户想要任何联系方式时,它会打开我的应用。有没有办法做到这一点(我没有在意图过滤器中找到它)。或者我必须自己设计?
基本上当任何应用尝试访问联系人时,该请求都会通过我的应用。它就像BroadcastReceiver用于联系人中的变化检测,我希望它能够在应用程序想要访问联系人时使用。
答案 0 :(得分:0)
你应该做什么:
BroadcastReceiver
s不是为了获取信息而设计的,而是可以通过实现自己的ContentProvider来实现类似于Contacts API的模式。
在您的应用中创建一个ContentProvider,允许其他应用在ContentProvider上进行查询,就像在Contacts ContentProvider上一样。
请参阅tutorial。
您需要设计内容uris的外观,例如:
vnd.android.cursor.item/my_app/contact
获取有关单个联系人的信息
您还应考虑在清单中为<provider>
添加自定义权限,以便允许的应用也可以访问您的数据。
原始答案:
如果您已经有Activity
查看联系人,请在AndroidManifest
中添加以下意图:
<activity
android:name="..."
...>
<intent-filter>
<action android:name="com.android.contacts.action.QUICK_CONTACT" />
<action android:name="android.provider.action.QUICK_CONTACT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/contact" />
<data android:mimeType="vnd.android.cursor.item/person" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/person" />
<data android:mimeType="vnd.android.cursor.item/contact" />
<data android:mimeType="vnd.android.cursor.item/raw_contact" />
</intent-filter>
</activity>
您需要使用Activity
中的mimetypes和数据uris正确处理传入意图。
您可以在Android系统联系人应用清单中找到一个示例:https://android.googlesource.com/platform/packages/apps/Contacts/+/master/AndroidManifest.xml#307
您可以通过添加widget
名为&#34; Contact 1x1
&#34;来测试您的实施情况。 (名称可能因设备而异)到主屏幕,并选择小部件应启动的联系人。
单击此小部件时,它应调用以上意图之一。