我想启动用户从我的应用程序中选择的应用程序。但是,我不确定我会怎么做。我试过这个:
Intent intent = new Intent();
intent.setAction(Contacts.Intents.SHOW_OR_CREATE_CONTACT);
startActivity(intent);
但这似乎会引发错误并强制关闭我的应用程序。我也尝试添加:
<action android:name="Contacts.Intents.SHOW_OR_CREATE_CONTACT"/>
在 AndroidManifest 文件中,但无济于事。
查看 Logcat 表明这是一个“IOexception - 没有这样的文件或目录”。由此产生了几个问题。我通读了 Android 文档并注意到 Contact.Intents 类已被弃用。但是,它的后继者 ContactContracts 的目标是 API 级别 5,而我的目标是 API 级别 3。这可能是问题所在吗?此外,我已将此应用程序硬编码到代码中。有没有办法检索用户选择的任何应用程序的 Intent ,以便可以启动它们?
最佳答案
您需要将额外信息传递到 Intent 中,以告知 Android 您想要显示或创建的内容。否则 Android 不知道要启动什么 Activity 并且(大概在您的情况下)抛出 ActivityNotFoundException
。
对于联系人,您使用通用Intent.ACTION_INSERT_OR_EDIT
,然后使用个人联系人的 MIME 类型 (Contacts.People.CONTENT_ITEM_TYPE
)。
例如:
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.setType(People.CONTENT_ITEM_TYPE);
intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");
intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE, Contacts.PhonesColumns.TYPE_MOBILE);
这将调出联系人应用,提示您选择现有联系人以添加电话号码,或创建新联系人。
您无需向 list 添加任何特殊内容即可启动外部 Activity 。只有当您要直接操作联系人 ContentProvider
时,您才需要向您的 list 添加适当的 CONTACT 权限。
关于android - 从我的应用程序启动外部应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1977243/