从我的应用程序启动外部应用程序

key*_*rdP 5 android launching-application android-intent

我想启动用户在我的应用程序中选择的应用程序.但是,我不确定我该怎么做.我试过这个:

Intent intent = new Intent();
intent.setAction(Contacts.Intents.SHOW_OR_CREATE_CONTACT);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

但这似乎抛出一个错误并强行关闭我的应用程序.我也尝试过添加:

<action android:name="Contacts.Intents.SHOW_OR_CREATE_CONTACT"/>
Run Code Online (Sandbox Code Playgroud)

在AndroidManifest文件中,但无济于事.

看一下Logcat就会发现它是"IOexception - 没有这样的文件或目录".由此产生了几个问题.我阅读了Android文档并注意到不推荐使用Contact.Intents类.然而,它是继承者,ContactContracts针对API级别5,而我的目标是API级别3.这可能是问题吗?此外,我已将此应用程序硬编码到代码中.有没有办法检索用户选择的任何应用程序的意图,以便它们可以启动?

Chr*_*Orr 7

你需要额外的信息传递到意图告诉Android的东西你要显示或创建.否则Android不知道要启动什么活动(可能在你的情况下)抛出一个ActivityNotFoundException.

对于联系人,您使用generic,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);
Run Code Online (Sandbox Code Playgroud)

这将打开联系人应用程序,提示您选择现有联系人以添加电话号码或创建新联系人.

您无需在清单中添加任何特殊内容即可启动外部活动.只有在您直接操作联系人时才ContentProvider需要向清单添加适当的CONTACT权限.