4

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

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

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

提前致谢!

4

1 回答 1

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;
       // }

    }

我为上述代码获得了六个活动匹配项:

在此处输入图像描述

于 2013-08-25T07:06:51.303 回答