BroadcastReceiver用于联系人查看

时间:2017-11-02 12:50:42

标签: android android-contacts android-broadcastreceiver

我正在尝试为联系人设计广播接收器,这意味着当其他应用或用户想要任何联系方式时,它会打开我的应用。有没有办法做到这一点(我没有在意图过滤器中找到它)。或者我必须自己设计?

基本上当任何应用尝试访问联系人时,该请求都会通过我的应用。它就像BroadcastReceiver用于联系人中的变化检测,我希望它能够在应用程序想要访问联系人时使用。

1 个答案:

答案 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;来测试您的实施情况。 (名称可能因设备而异)到主屏幕,并选择小部件应启动的联系人。 单击此小部件时,它应调用以上意图之一。