5

我想启动用户从我的应用程序中选择的应用程序。但是,我不确定我将如何去做。我试过这个:

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

4

5 回答 5

7

您需要将额外的信息传递到 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 权限添加到您的清单中。

于 2009-12-29T22:33:57.680 回答
1

我为此目的使用此代码:

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

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

于 2010-06-29T18:55:27.087 回答
0

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

于 2009-12-29T22:18:54.873 回答
0

请尝试以下代码:

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

this.startActivity(intent);

(对不起,如果语法有问题,我这台电脑上没有安卓)

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

丹尼尔

于 2009-12-29T22:21:26.493 回答
0

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

于 2011-05-27T09:07:44.580 回答