【问题标题】:Open third party app from intent从意图打开第三方应用程序
【发布时间】:2012-03-08 17:24:57
【问题描述】:

如果我要打开其他应用程序,我正在开发一个应用程序。唯一的问题是我不知道如何引用第三方应用程序。我打算使用一个意图。您可以仅使用包名来引用它,还是需要 Main Activity 意图。有什么简单的方法可以找到正确的意图,然后参考它。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    如果我要打开其他应用程序,我正在开发一个应用程序。

    我将此解释为您正在创建一个启动器,类似于在主屏幕上找到的启动器。

    您能否仅使用包名来引用它,或者您是否需要 Main Activity 意图。

    启动器使用ACTION_MAIN/CATEGORY_LAUNCHERIntent

    有没有什么简单的方法可以找到正确的意图,然后参考它。

    使用PackageManager 查找设备上所有可能的ACTION_MAIN/CATEGORY_LAUNCHER 活动,然后将这些活动显示给用户以供选择。然后,您可以构建一个合适的Intent 来启动他们的具体选择。

    Here is a sample project 实现了一个启动器。

    为了列出可以启动的东西,该示例应用使用了:

    PackageManager pm=getPackageManager();
    Intent main=new Intent(Intent.ACTION_MAIN, null);
    
    main.addCategory(Intent.CATEGORY_LAUNCHER);
    
    List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);
    

    这里是实际的启动逻辑,基于用户单击ListActivity 中的这些“启动项”之一:

      @Override
      protected void onListItemClick(ListView l, View v,
                                     int position, long id) {
        ResolveInfo launchable=adapter.getItem(position);
        ActivityInfo activity=launchable.activityInfo;
        ComponentName name=new ComponentName(activity.applicationInfo.packageName,
                                             activity.name);
        Intent i=new Intent(Intent.ACTION_MAIN);
    
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                    Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        i.setComponent(name);
    
        startActivity(i);    
      }
    

    【讨论】:

    • 你知道一个同样使用 RadioButtons 或 CheckBoxes 的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多