【问题标题】:How to get Activity Class from intent filter如何从意图过滤器中获取活动类
【发布时间】:2013-08-09 13:57:48
【问题描述】:

假设有一个应用程序包名称为com.example

应用程序有一个带有意图过滤器android.intent.action.SEND的活动

现在我想以编程方式找到支持上述意图过滤器的组件类。

此代码过滤所有匹配 ACTION_SEND 的类。

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

但是,我只想从匹配 com.example 的包中选择活动。

【问题讨论】:

    标签: android android-intent intentfilter


    【解决方案1】:

    可以使用 Context.getPackageManager()queryIntentActivities 检索 PackageManager,您正在考虑的意图将返回可以执行该意图的活动的 ResolveInfo。

    ResolveInfo.activityInfo 将为您提供包含 packageName 的 ActivityInfo,这是您要过滤的内容。

    一旦您选择了您想要的目标,您就可以使用包名称和类为该活动创建ComponentName,并根据所需的意图创建setComponent(),以明确定位您想要的活动。

    【讨论】:

    • 我得到了 ResolveInfo 的列表。如何获取班级名称?我尝试了resolveinfo.activityInfo.targetActivityresolveinfo.activityInfo.parentActivityName,但都返回了null
    • 知道了。 resolveinfo.activityInfo.name 是要使用的类名。
    【解决方案2】:

    这就是我实现它的方式。获取支持该意图的所有包的列表。

    List<ResolveInfo> rInfo =  getActivity().getPackageManager().queryIntentActivities(createShareIntent(),0);
    for(ResolveInfo r:rInfo){
        if(r.activityInfo.packageName.equals("com.example")){
    
            chosenName = new ComponentName( r.activityInfo.packageName,
                    r.activityInfo.name);
            break;
        }
    }
    
    Intent choiceIntent = new Intent(createShareIntent());
    choiceIntent.setComponent(chosenName);
    startActivity(choiceIntent);
    

    创建分享意图

    private Intent createShareIntent() {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_TEXT,"Message");
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject...");
        return shareIntent;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      相关资源
      最近更新 更多