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

发布于 2024-08-16 11:22:13 字数 581 浏览 9 评论 0原文

我想启动用户从我的应用程序中选择的应用程序。但是,我不确定我会如何去做这件事。我已经尝试过:

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。这可能是问题所在吗?另外,我已将此应用程序硬编码到代码中。有没有办法检索用户选择的任何应用程序的意图以便可以启动它们?

I would like to launch an app the user selects from within my application. However, I'm not sure how I'd go about doing this. I've tried this:

Intent intent = new Intent();
intent.setAction(Contacts.Intents.SHOW_OR_CREATE_CONTACT);
startActivity(intent);

But this seems to throw an error and force close my application. I also tried adding:

<action android:name="Contacts.Intents.SHOW_OR_CREATE_CONTACT"/>

in the AndroidManifest file, but to no avail.

A look at Logcat shows that it's an "IOexception - no such file or directory". A couple of questions arise from this. I read through the Android docs and noticed that the Contact.Intents class is deprecated. However, it's successor, ContactContracts is aimed at API level 5 whereas I'm targeting API level 3. Could this be the problem? Also, I've hardcoded this application into the code. Is there a way to retrieve the intents of any application the user selects so that they can be launched?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

沉睡月亮 2024-08-23 11:22:13

您需要将额外的信息传递到 Intent 中,以告诉 Android 您想要显示或创建什么。否则,Android 不知道要启动哪个活动,并且(大概在您的情况下)会抛出 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);

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

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

You need to pass extra information into the intent to tell Android what you want to show or create. Otherwise Android doesn't know what activity to start and (presumably in your case) throws an ActivityNotFoundException.

For a contact, you use the generic Intent.ACTION_INSERT_OR_EDIT then use the MIME type of an individual contact (Contacts.People.CONTENT_ITEM_TYPE).

For example:

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);

That will bring up the contacts app, prompting you to select an existing contact to add the phone number to, or to create a new contact.

You don't need to add anything special to your manifest to start external activities. Only if you were to directly manipulate the contacts ContentProvider would you need to add the appropriate CONTACT permissions to your manifest.

九歌凝 2024-08-23 11:22:13

我为此目的使用此代码:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.settings", "com.android.settings.Settings"); 
startActivity(intent);

这将启动“设置”应用程序,您也可以使用这些应用程序:

intent.setClassName("com.android.music", "com.android.music.MediaPlaybackActivityStarter");
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity");
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity");

第一个启动默认音乐应用程序,第二个启动联系人,第三个启动拨号器。
希望这有帮助。

I use this code for that purpose:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.settings", "com.android.settings.Settings"); 
startActivity(intent);

This will launch the Settings app, you can use these also:

intent.setClassName("com.android.music", "com.android.music.MediaPlaybackActivityStarter");
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity");
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity");

The first starts the default music app, the second the contacts, and the third the dialer.
Hope this helps.

渡你暖光 2024-08-23 11:22:13

您需要将有效的参数传递给您启动的应用程序。许多应用程序期望数据 URI 和/或某些附加内容有效。

You need to pass in valid arguments to the apps you start. A lot of apps expect the data URI and / or certain extras to be valid.

淡墨 2024-08-23 11:22:13

请尝试以下代码:

<块引用>

意图意图 = new Intent(Contacts.Intents.SHOW_OR_CREATE_CONTACT);

this.startActivity(意图);

(抱歉,如果语法有问题,我的计算机上没有 Android)

并从清单中删除该操作。那是不需要的。
操作方法用于其他用途。
有关更多信息,请查看 android 网站: http://developer.android .com/reference/android/content/Intent.html

丹尼尔

Please try the following code:

Intent intent = new Intent(Contacts.Intents.SHOW_OR_CREATE_CONTACT);

this.startActivity(intent);

(sorry if there is something wrong on the syntax, I dont have android in this computer)

And remove the action from the manifest. that is not needed.
The action method is used for something else.
For more info, please look at the android site: http://developer.android.com/reference/android/content/Intent.html

Daniel

软糖 2024-08-23 11:22:13

您调用的活动不仅应该出现在其自己的包的清单中,而且还应该出现在 CALLING 包的清单中。

The activity you are calling should appear not only in the Manifest for its own package, but in the Manifest for the CALLING package, too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文