1

假设有一个应用程序包名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

4

2 回答 2

2

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

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

一旦你选择了你想要的目标,你可以使用包名和类和setComponent()来为那个活动创建ComponentName ,以明确地定位你想要的活动。

于 2013-08-09T14:48:33.867 回答
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;
}
于 2013-08-22T11:26:43.143 回答