【问题标题】:Predefined actions of application. Link to my application from Contacts应用程序的预定义操作。从联系人链接到我的应用程序
【发布时间】:2012-09-12 08:03:59
【问题描述】:

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

场景:

  1. 输入电话联系人
  2. 我们选择Contact item

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

  4. 我点击我的应用程序图标,应用程序从联系人记录中的数据开始。

我必须向 AndroidManifest 添加什么才能做到这一点?

【问题讨论】:

  • 查看电话和消息应用程序的代码,了解声明了哪些意图过滤器

标签: android dialog


【解决方案1】:

为您的应用添加此意图过滤器,使其对所有联系人可见。

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

【讨论】:

  • 就是这样!谢谢你! :) 但我还有一个问题:如何从我的应用程序中点击的联系人获取数据?
  • 我在自己对主题问题的回答中提供了源代码
  • 这取决于你需要什么数据,在这种情况下我猜你只会得到名字,但取决于 mimetype ,它会改变。正如@Hit 回答的那样,您可以使用 getintent.getData() 获取数据
【解决方案2】:

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

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

为此,您需要:

  • 在您的清单文件中指定您的应用程序能够处理所需的操作,例如“发送短信”。为此,您需要将意图过滤器添加到您希望在这种情况下被调用的 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 
    }
    }
    

【讨论】:

  • 3 - 是目标联系人的contactID,知道了就可以查询Contact数据库。这是演示 ContactsContract 类用法的示例项目:code.google.com/p/android-contacts-contract-example
  • 不是contactID。我在 id = {1,2,3} 的模拟器上有 3 个联系人,但 callIntent.getDataString() 返回 "content://com.android.contacts/data/5"..如何获取被选中的联系人的contactId?
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 2021-03-09
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
相关资源
最近更新 更多