我想启动用户在我的应用程序中选择的应用程序。但是,我不确定我该怎么做。我试过这个:
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.这可能是问题吗?此外,我已将此应用程序硬编码到代码中。有没有办法检索用户选择的任何应用程序的意图,以便可以启动它们?
答案 0 :(得分:7)
您需要将额外信息传递给意图告诉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权限。
答案 1 :(得分: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");
第一个启动默认音乐应用,第二个启动联系人,第三个启动拨号器。 希望这会有所帮助。
答案 2 :(得分:0)
您需要将有效参数传递给您启动的应用。很多应用程序都希望数据URI和/或某些附加功能有效。
答案 3 :(得分:0)
请尝试以下代码:
Intent intent = new Intent(Contacts.Intents.SHOW_OR_CREATE_CONTACT);
this.startActivity(意向);
(抱歉,如果语法有问题,我在这台计算机上没有安装android)
从清单中删除操作。这是不需要的。 动作方法用于其他方面。 有关详细信息,请查看android站点:http://developer.android.com/reference/android/content/Intent.html
丹尼尔
答案 4 :(得分:0)
您正在调用的活动不仅应出现在Manifest中,而且还应出现在CALLING包的Manifest中。