我有一个面试问题.....
当有多个活动竞争执行意图时,如何指定从隐式意图启动哪个活动,而无需用户干预。
我对这个问题的回答是在每个活动中使用适当的意图过滤器,但这听起来不对......
提前致谢!
答案 0 :(得分:7)
创建Intent 时,您可以传递显式组件名称。即班级名称。现在只有该组件才会收到意图。
示例:
Intent myIntent = new Intent(getApplicationContext(),RequiredActivity.class);
startActivity(myIntent);
如果您没有指定确切的组件,Android会巧妙地让用户选择一个处理意图的组件。
示例:
Intent myIntent = new Intent(Intent.ACTION_VIEW);
startActivity(myIntent);
如果你想通过所有处理意图的组件,你自己而不是让android给用户显示选择,你也可以这样做:
示例:
Intent myIntent = new Intent(Intent.ACTION_VIEW);
List<ResolveInfo> infoList = getPackageManager().queryIntentActivities(myIntent, 0);
for (ResolveInfo ri : infoList){
ActivityInfo ai = ri.activityInfo;
String packageName = ai.packageName;
String componentName = ai.name;
// you can pick up appropriate activity to start
// if(isAGoodMatch(packageName,componentName)){
// myIntent.setComponent(new ComponentName(packageName,componentName));
// startActivity(myIntent);
// break;
// }
}
上面代码我有6个活动匹配: