2012-03-17 160 views
1

我正在开发一个使用程序包名称来启动第三方应用程序的应用程序。我做了一些调查,发现所有的应用程序都可以从启动器的意图开始。有没有人知道如何通过点击一个按钮来做到这一点。打开第三方应用程序

+0

重复http://stackoverflow.com/questions/3422758/start-application-knowing-package-name – Calvin 2012-03-17 18:31:30

+0

这不是重复。我问如何开始它,这个问题是如何找到包名。我已经知道如何找到包名。 – Magakahn 2012-03-17 18:34:07

回答

6

你不能真正 '启动应用程序'。你可以尝试从第三方应用程序的启动意图,如果你知道包名称:

Intent intent = getPackageManager().getLaunchIntentForPackage("com.thirdparty.package"); 
startActivity(intent); 
+1

应该将标志设置为“setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)”以重新打开已打开的应用程序。 – JacksOnF1re 2016-02-24 13:56:35

2

只是把它放在一个View.OnClickListener:

myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent = getPackageManager().getLaunchIntentForPackage(theOtherActivityPackage); 
     startActivity(intent); 
    } 
}); 
4

对于上述接受的答案,如果你的模拟器没有安装第三方应用程序,你应该优雅地处理它也。 这里是一个相同的完整代码:

public void openThirdPartyApp() { 

     Intent intent = new Intent("com.thirdparty.package"); 
      intent.setPackage("com.thirdparty.package"); 

      try { 
       ((Activity) context).startActivityForResult(intent, REQUEST_CODE); 
      } catch (ActivityNotFoundException e) { 
       downloadIt(); 
      } 
     } 

    private void downloadIt() { 

    Uri uri = Uri.parse("market://search?q=pname:" + "com.thirdparty.package"); 
    Intent intent = new Intent(Intent.ACTION_VIEW, uri); 

       try { 
        context.startActivity(intent); 
       } catch (ActivityNotFoundException e) { 
    //creates a small window to notify there is no app available 
       } 

      } 
     } 

    } 
+0

Good answear,但这不适用于我正在做的事情。我正在使用一个包管理器来获取包名,然后启动它。但是这可能会在以后的项目中有用。谢谢你的回答! – Magakahn 2012-05-13 10:46:16

+0

这不起作用...在意图初始化代码中:Intent intent = new Intent(“com.thirdparty.package”);应该有一个像“android.intent.action.MAIN”这样的动作没有? – syonip 2015-12-16 12:05:15

+0

@syonip,你为什么要使用“android.intent.action.MAIN”? – YuDroid 2015-12-16 12:25:15

相关问题