我有一个面试问题......
当有多个活动竞争执行意图时,如何指定从隐式意图启动哪个活动,而无需用户干预。
我对这个问题的回答是在每个活动中使用适当的意图过滤器,但这听起来是错误的..
提前致谢!
我有一个面试问题......
当有多个活动竞争执行意图时,如何指定从隐式意图启动哪个活动,而无需用户干预。
我对这个问题的回答是在每个活动中使用适当的意图过滤器,但这听起来是错误的..
提前致谢!
创建 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;
// }
}
我为上述代码获得了六个活动匹配项: