【发布时间】:2012-09-12 08:03:59
【问题描述】:
我想编写与联系人相关的应用程序。
场景:
- 输入电话联系人
我们选择Contact item
我的应用程序的图标应该出现在 QuickAction 对话框中。
- 我点击我的应用程序图标,应用程序从联系人记录中的数据开始。
我必须向 AndroidManifest 添加什么才能做到这一点?
【问题讨论】:
-
查看电话和消息应用程序的代码,了解声明了哪些意图过滤器
我想编写与联系人相关的应用程序。
场景:
我们选择Contact item
我的应用程序的图标应该出现在 QuickAction 对话框中。
我必须向 AndroidManifest 添加什么才能做到这一点?
【问题讨论】:
为您的应用添加此意图过滤器,使其对所有联系人可见。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/name" />
</intent-filter>
更改 mimetype,以便只有具有特定数据的联系人才有您的活动。
例如,如果您希望您的活动仅显示给使用电子邮件的联系人,则将 mimetype 更改为 vnd.android.cursor.item/email_v2 。您可以从DataColumns的子类中获取mimetype名称
【讨论】:
只有当您的应用在用户设备上的唯一应用中能够处理所需类型的内容时,这种行为才可能发生。例如,如果您想使用“发送短信”或“拨打电话”的内容类型 - 您的应用很可能不是设备上唯一可以处理此类操作的应用(还有股票电话拨号器和短信应用程序)。
无论如何,您始终可以将您的应用程序添加到应用程序列表,当用户点击该快速操作时,该列表会出现。它看起来像这样:
为此,您需要:
在您的清单文件中指定您的应用程序能够处理所需的操作,例如“发送短信”。为此,您需要将意图过滤器添加到您希望在这种情况下被调用的 Activity:
<intent-filter>
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
</intent-filter>
在您的目标 Activity 添加代码,以处理所需的内容类型。在您的目标Activity onCreate() 方法或onNewIntent() 方法中从调用Intent 查询数据字符串参数。下面是一些示例代码来演示一般想法:
public class MyActivity extends Avtivity {
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String dataStr = intent.getDataString();
// do some processing with dataStr
}
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent callIntent = getIntent();
String dataStr = callIntent.getDataString();
// do some processing with dataStr
}
}
【讨论】: