首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使Intent.resolveActivity()在Roboletric测试中返回true

在Robolectric测试中,使Intent.resolveActivity()返回true的方法是使用ShadowPackageManager来模拟PackageManager的行为。ShadowPackageManager是Robolectric框架提供的一个影子类,用于模拟Android系统中的PackageManager。

下面是一个示例代码,展示如何使用ShadowPackageManager来模拟PackageManager的行为,使Intent.resolveActivity()返回true:

代码语言:txt
复制
import android.content.Intent;
import android.content.pm.PackageManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowPackageManager;

@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class MyTest {

    @Test
    public void testResolveActivity() {
        // 创建一个模拟的PackageManager对象
        ShadowPackageManager shadowPackageManager = new ShadowPackageManager();

        // 设置resolveActivity()返回true的条件
        shadowPackageManager.setResolveActivity(true);

        // 获取PackageManager的实例
        PackageManager packageManager = shadowPackageManager.getPackageManager();

        // 创建一个Intent对象
        Intent intent = new Intent();

        // 调用resolveActivity()方法,判断是否有能够处理该Intent的Activity
        boolean resolved = intent.resolveActivity(packageManager) != null;

        // 断言resolved为true
        assert resolved;
    }
}

在上述示例代码中,我们通过创建一个模拟的PackageManager对象(ShadowPackageManager),并设置resolveActivity()返回true的条件,然后使用该模拟的PackageManager对象来获取PackageManager的实例,并调用resolveActivity()方法来判断是否有能够处理该Intent的Activity。最后,我们使用断言来验证resolveActivity()的返回值是否为true。

注意:上述示例代码中使用了Robolectric框架来进行单元测试,需要在项目的build.gradle文件中添加相关依赖。具体的配置和使用方法可以参考Robolectric官方文档。

推荐的腾讯云相关产品:腾讯云移动测试服务(https://cloud.tencent.com/product/mts)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android 必知必会 - 使用 Intent 打开第三方应用及验证可用性

    GitHub 版 本文主要记录: 使用 Intent 打开第三方应用或指定 Activity 的三种方式 使用上面三种方式时分别如何判断该 Intent 能否被解析 判断该 Intent 能否被解析可能出现的遗漏...Activity 的方式 只知道包名 - 需要有默认的入口 Activity 启动指定第三方应用的 Activity - 需要包名和 Activity 名,且该 Activity 的 Export=“true...但此方式要求的条件多,如下: 知道 App 的包名和 Activity 的全路径及其名称 需要启动的目标 Activity AndroidManifest.xml 的属性 Export=“true...相对的,resolveActivityInfo() 则可以进行有效判定并返回 null。...PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } 那么,总结下来就是: 方式一 PackageManager.getLaunchIntentForPackage(),直接判断返回

    4.1K40

    Android开发中使用Intent打开第三方应用及验证可用性的方法详解

    本文主要记录: ① 使用 Intent 打开第三方应用或指定 Activity 的三种方式 ② 使用上面三种方式时分别如何判断该 Intent 能否被解析 ③ 判断该 Intent 能否被解析可能出现的遗漏...Activity 的方式 ① 只知道包名 – 需要有默认的入口 Activity ② 启动指定第三方应用的 Activity – 需要包名和 Activity 名,且该 Activity 的 Export="true...但此方式要求的条件多,如下: 知道 App 的包名和 Activity 的全路径及其名称 需要启动的目标 Activity AndroidManifest.xml 的属性 Export="true...相对的,resolveActivityInfo() 则可以进行有效判定并返回 null。...PackageManager.MATCH_DEFAULT_ONLY); return list.size() 0; } 那么,总结下来就是: 方式一 PackageManager.getLaunchIntentForPackage(),直接判断返回

    2.8K21

    Android笔记:判断是否为模拟器(实测夜神通过)

    因为不确定因素太多,最近公司需要禁止本程序虚拟机上运行。...我网上找了好多,各种方法什么设备号,拨打电话,蓝牙设备,模拟器的检测往往是防作弊的重要一关,这里把这两天收集到的代码写在这偏文章里,和大家进行一个简单的分享。...不过随着防反作弊技术的迭代,现在很多模拟器都可以改变这些值来逃避检测,所以上述传统方法很多时候未曾达到开发者的预期效果。...intent.setAction(Intent.ACTION_DIAL); // 是否可以处理跳转到拨号的 Intent boolean canResolveIntent = intent.resolveActivity...; } else { return false; } } 蓝牙 /* *判断蓝牙是否有效来判断是否为模拟器 *返回:true 为模拟器

    1.6K11

    Android 点击通知栏消息打开activity,并判断app是否运行

    ; } } return false; } 获取app的运行状态,返回1代表当前应用在前台运行,返回2代表当前应用在后台运行,返回0代表应用未启动(没有一个存活的activity...否则就启动应用,intent传递一个键为FORM_NOTICE_OPEN,值为true的参数标识是从点击消息通知跳转过来的,再将上一步传递过来的intent当做参数传给当前的intent。...例如:现在栈的情况为:A B C D,D这个Activity通过Intent跳转到D,那么现在的栈情况为: A B C D D 。...此时如果依次按返回键,D D C B A将会依次弹出栈而显示界面上。...D的Launch mode设置成了singleTop,那么D启动Intent跳转到D,那么将不会新创建一个D的实例压入栈,此时栈的情况依然为:A B C D。

    3.3K10

    Android自动化测试基础 -- ADB介绍

    前言 每一个准备学习Android自动化测试的同学,都会面临一个Android自动化测试框架的选择问题。与之前PC和WEB的测试框架不同,Android的自动化框架乍一看,非常的唬人。...通过这篇文章的介绍,希望能帮助到想了解或者进行Android自动化测试的同学,对Android自动化测试和框架有一个快速的入门和了解。...Monkey monkeyrunner 当然你还可能接触到其它的自动化框架,比如: python版的uiautomator和uiautomator2 腾讯的QT4A 网易的AirTest 基于JVM的Roboletric...否则在使用过程“尥蹶子”就不好了。如果你在网上搜ADB原理,会出现很多很多的相关文章,所以这里就只做一个简单的说明,想要挖局更多细节的可以自行深入。 ?...adb命令时会自动启动,之后会一直运行在后台 adbd则是一直在手机上的后台运行,至于启动时间点估计是设置debug时 ?

    1.3K41

    Android M 权限最佳实践

    例如,应用申请READ_EXTERNAL_STORAGE权限,用户同意授权后,则应用同时具有READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限。...会默认给予所有AndroidManifest.xml申请的权限。...( )方法名太长,表格简写 第i次用户勾选了“不再询问”,同时也没有给予应用权限,则第i + 1次应用将无法唤起请求权限的Dialog,只能引导用户进入设置界面,手动勾选所需权限。...从上面的表格可以看出,如果上次shouldShowRequestPermissionRationale( )返回true,而这次调用该方法返回了false,则说明用户在上次勾选了“不再询问”。...序号 用户是否授予权限 shouldShowRationale( ) 返回 是否勾选“不再询问” 再次调用shouldShowRationale( )返回 1 否 false - true 2 否 true

    1.3K91

    【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )

    Hook 技术进行 Hook 住 Activity 启动过程 ; ---- 一、分析 Activity 启动源码 ---- 1、源码分析 " 宿主 " 模块 , 启动 " 插件 " 模块 , 调用的是...AutofillManager.EXTRA_RESTORE_CROSS_ACTIVITY)) { if (TextUtils.equals(getPackageName(), intent.resolveActivity...设置 Field mInstrumentation 字段的可访问性 mInstrumentation_Field.setAccessible(true); 3、获取 Activity 的...Instrumentation mInstrumentation 成员变量 ; 代理类需要持有上述成员变量 , 通过反射获取该成员 , 并设置给代理者 ; 代理类 , 继承 Instrumentation...execStartActivity 方法 ; 代理类 execStartActivity 方法 , 首先调用持有的 Activity 中原本的 Instrumentation mInstrumentation

    90530

    Android组件化开发思想与实践

    组件化方案 组件化是一种思想,团队使用组件化的过程不必拘泥于形式,可以根据自己负责的项目大小和业务需求的需要制定合适的方案,如下图就是一种组件化结构设计。 ?...宿主app 组件化,app可以认为是一个入口,一个宿主空壳,负责生成app和加载初始化操作。 业务层 每个模块代表了一个业务,模块之间相互隔离解耦,方便维护和复用。...3、Appliction里对ARouter进行初始化,因为ARouter是所有的模块层组件都会用到,所以它的初始化放在BaseAppliction完成。...线上版本需要关闭,否则有安全风险) } ARouter.init(application); //尽可能早,推荐Application初始化 } } 4、...1、base定义接口并继承ARouter的IProvider。

    65220

    【Android基础】Android利用Intent与其他应用交互

    前言: 上一篇博客给大家聊了Intent的定义,分类、属性和功能,相信大家对于IntentAndroid的作用已经清楚,这一篇博客将会给大家聊Intent的用法。...比如你的应用程序需要给用户显示一个地理位置地图上,你不必在你的应用程序实现地图功能,而是创建一个显示这个地理位置的Intent,发送出去,Android系统会启动那些可以处理这个请求的应用程序。...Android通过文件的MIME类型来判断有哪些应用程序可以处理这些文件,并使用其中的某一个应用程序(如果有多个可选的应用程序,则用户必须指定一个)处理之。...你可以调用queryIntentActivities()方法来验证Intent是否会有Activity响应,queryIntentActivities()返回一个能够响应该Intent的Activity...Intent.createChooser(intent, title); // Verify the intent will resolve to at least one activity if (intent.resolveActivity

    927100
    领券