2010-08-23 28 views
0

在android中,如何启动应用程序集作为默认应用程序(即Handcent for Messaging,Dolphin供浏览)?以意向启动默认应用程序

我只能找到如何使用明确的包名的意图:

Intent i = new Intent(Intent.ACTION_MAIN); 
     i.addCategory(Intent.CATEGORY_LAUNCHER); 

     switch (position) { 
     case 0: //messages 
      i.setPackage("com.android.mms"); 
      break; 
     case 1: //inbox 
      i.setPackage("com.android.email"); 
      break; 
     case 2: //browser 
      i.setPackage("com.android.browser"); 
     default: 
      i = null; 
     } 
+0

为了澄清,你想设置一个应用程序作为一个意图默认? – 2010-08-23 18:37:20

+0

是的,你可以澄清你的问题,我不知道你是否尝试设置一个默认的应用程序或只是启动一个活动的意图... – Frank 2010-08-23 20:16:24

+0

对不清楚。基本上我做了一个家庭应用程序,点击列表视图中的“消息”位将显示默认消息应用程序,“浏览器”启动默认浏览器等,但我不知道该怎么做。 上面的代码只是一个巧克力(通过启动正常的Android应用程序),直到有人回答这个:) 我想我必须使用意图和类别等,但我觉得他们真的很混乱。例如,有一个ACTION_SEND(我假设你可以用来发送短信),但我只想打开默认的短信程序,而不是发送一个。希望更清楚 – 2010-08-24 11:28:13

回答

2

如何,在Android中,我开始一个应用程序设置为默认值(即Handcent的消息,海豚的浏览) ?

“默认”用于特定操作(例如,发送消息),而不是一般的“消息传递”的一些抽象概念。

另外,上面显示的代码使用了不在SDK中的东西(即特定的包)。您的代码会在某些设备上中断,其中设备制造商已替换该应用。当股票应用被重构或重新命名时,您的代码可能会在未来的Android版本中崩溃。

我认为你需要重新考虑你要完成的是什么。

+0

好的,很酷。我认为我必须使用意图,类别和内容来做,但我还没有真正理解它们,所以我想我会尝试另一种方式。 因此,要启动消息传递应用程序,我应该将ACTION_SEND还是传递给Intent?如果你能向我解释,我将不胜感激。 – 2010-08-24 11:23:03

+0

好吧,所以没有办法打开默认的消息应用程序的句号?该死的。哦,谢谢你的帮助! – 2010-08-24 11:53:46

1

您可以搜索满足给定Intent(例如ACTION_SEND)的应用程序,决定要使用哪个应用程序,检索其组件名称,然后使用指定组件名称的其他Intent启动它。

开始:

Intent intent = new Intent(...); 
List<ResolveInfo> list = getPackageManager().queryIntentActivities(
    intent, PackageManager.MATCH_DEFAULT_ONLY); 
相关问题