假设有一个包名为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
的包中选择活动。
答案 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;
}