多个活动竞争一个意图

时间:2013-08-25 06:51:40

标签: android android-intent android-activity

我有一个面试问题.....

当有多个活动竞争执行意图时,如何指定从隐式意图启动哪个活动,而无需用户干预。

我对这个问题的回答是在每个活动中使用适当的意图过滤器,但这听起来不对......

提前致谢!

1 个答案:

答案 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个活动匹配:

enter image description here