android - 多个 Activity 竞争一个 Intent

标签 android android-intent android-activity

我有一道面试题......

当有多个 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 匹配项:

enter image description here

关于android - 多个 Activity 竞争一个 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426502/

相关文章:

android - 当 Android Activity 的回调在方向更改后变为 null 时,更新回调引用的正确方法是什么

android - 如何关闭所有 Activity 并退出应用程序

android - 如果用户单击 Android 主页按钮,如何自动关闭 admob 插页式广告?

android - Activity 拒绝开始

java - 如何将变量传递给 XPathExpression

java - 让 adMob 为 Android 旧版本运行

android - 在Activity而不是布局上使用dataBinding

android - 用相机拍照后 Intent 为空

android - 是否可以多次激发一个 Intent ?

android - Android 中的 *Window focus* 什么时候改变?