应用程序的预定义操作。从通讯录链接到我的应用程序

时间:2012-09-12 08:04:00

标签: android dialog

我想编写与Contacts相关联的应用程序。

场景:

  1. 输入电话联系人
  2. 我们选择联系人项目enter image description here

  3. 我的应用程序的图标应出现在QuickAction对话框中。

  4. 点击我的应用程序图标,Aplication从联系人记录中的数据开始。
  5. 我必须添加到AndroidManifest中才能做到这一点吗?

2 个答案:

答案 0 :(得分:4)

为您的应用添加此意图过滤器,以便所有联系人都可以看到。

    <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名称

答案 1 :(得分:4)

只有当您的应用程序位于用户设备上的唯一应用程序中且能够处理所需类型的内容时,才能实现此行为。例如,如果您想使用内容类型“发送短信”或“拨打电话” - 您的应用很可能不是设备上唯一可以处理此类操作的应用(还有股票电话拨号和短信应用程序)。

无论如何,您始终可以将应用程序添加到应用列表,当用户点击该快速操作时,该应用列表就会显示。它看起来像这样:

List of apps for content type

为此,您需要:

  • 在清单文件中指定您的应用程序能够处理所需的操作,例如“发送短信”。为此,您需要在Activity中添加intent过滤器,在这种情况下您希望调用它:

    <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 onCreate()方法或调用Intent的onNewIntent()方法查询数据字符串参数中。以下是一些示例代码,用于演示一般概念:

    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 
    }
    }