我有一道面试题......
当有多个 Activity 竞争执行 Intent 时,如何指定从隐式 Intent 启动哪个 Activity,而不需要用户干预。
我对这个问题的回答是在每个 Activity 中使用适当的 intent-filter,但这听起来是错误的..
提前致谢!
最佳答案
创建 Intent 时,您可以传递明确的组件名称。即类名。现在只有那个组件会收到 Intent 。
例子:
Intent myIntent = new Intent(getApplicationContext(),RequiredActivity.class);
startActivity(myIntent);
如果您没有指定确切的组件,Android 会巧妙地让用户选择处理 Intent 的组件之一。
例子:
Intent myIntent = new Intent(Intent.ACTION_VIEW);
startActivity(myIntent);
如果你想遍历处理 Intent 的所有组件,而不是让 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;
// }
}
我得到了上面代码的六个 Activity 匹配项:
关于android - 多个 Activity 竞争一个 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426502/