【问题标题】:BroadcastReceiver for contact viewing用于联系人查看的广播接收器
【发布时间】:2017-11-02 12:50:42
【问题描述】:

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

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

【问题讨论】:

  • 请编辑您的问题并详细解释“当其他应用程序或用户想要任何联系方式时它打开我的应用程序”是什么意思。另外,请解释一下广播与这些有什么关系。

标签: android android-contacts android-broadcastreceiver


【解决方案1】:

你应该做什么:

BroadcastReceivers 不是为获取信息而设计的,相反,您可以通过实现自己的ContentProvider 来实现类似于联系人 API 的模式。

在您的应用中创建一个 ContentProvider,以允许其他应用像在联系人 ContentProvider 上一样查询您的 ContentProvider。

tutorial

您需要设计您希望内容 uri 的外观,例如:

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 中的那些 mimetype 和数据 uri 正确处理传入的意图。

你可以在Android系统的Contacts app manifest中举例:https://android.googlesource.com/platform/packages/apps/Contacts/+/master/AndroidManifest.xml#307

您可以通过将名为“Contact 1x1”(名称可能因设备而异)的widget 添加到主屏幕并选择小部件应启动的联系人来测试您的实施。 单击此小部件时,它应该调用上述意图之一。

【讨论】:

  • 我的问题是错误的,我明白你的回答。我想用我的应用替换contactsContract。这样他们就不应该使用游标来获取数据,而是可以创建意图并接收详细信息。
  • 好的,我明白了,所以您要在手机中提供其他应用程序以使用您的应用程序获取联系人信息?这种意图会是什么样子,就像我的答案一样?
猜你喜欢
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
相关资源
最近更新 更多