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

标签 android android-intent launching-application

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

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/

相关文章:

iphone - iOS : Failed to launch . 应用程序文件

iOS 应用程序在手动启动时崩溃/挂起,但在其他情况下不会

android - 如何从其在android中的 Activity 中调用子 fragment 方法适配器的功能

android - 在 Android 中隐藏权限 Intent ?

android - 如何取消处于运行状态的AsyncTask。

java - 困惑 Intent 构造函数出了什么问题

Android M - 权限设置重定向(INTENT ACTION)

c# - 是否可以使用 NDEFLaunchApp 记录获取 URI 并使用不带 NFC 标签的 LaunchUriAsync 来启动系统/第三方应用程序?

java.lang.SecurityException : Not allowed to start service Intent error in android api level 23

android - 如何在运行时根据数据选择第一个 Activity ?