如何从意图过滤器获取活动类

时间:2013-08-09 13:57:49

标签: android android-intent intentfilter

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

该应用程序的活动具有意图过滤器android.intent.action.SEND

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

此代码会过滤所有与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的包中选择活动。

2 个答案:

答案 0 :(得分:2)

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

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

选择了所需的目标后,您可以使用包名称和类以及ComponentName为该活动制作setComponent()所需的意图,以明确定位您想要的活动。

答案 1 :(得分:0)

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

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;
}