首页
学习
活动
专区
工具
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.4K40
  • Android笔记:判断是否为模拟器(实测夜神通过)

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

    1.7K11

    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.4K10

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

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

    1.3K41

    处理屏幕旋转导致的重建,单例对象,StringBuilder进行拼接,ProGurad 混淆,VectorDrawable 及 AnimatedVectorDrawable,IntentService

    处理屏幕旋转导致的重建 当屏幕发生旋转时,如果我们没有在AndroidManifest.xml中,对其configChanges属性进行声明,那么就会导致Activity进行重建,此时,就需要重新加载Activity...在EditText控件中输入后,当屏幕旋转后,里面的内容就会不见,activity进行了重建,但是checkBox不会重建。...intent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity")); if (intent.resolveActivity...minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile(...对于一些短时的后台任务,我们可以考虑采用IntentService,它的onHandleIntent回调是在异步线程中执行的,并且任务执行完毕后,该Service会自动销毁,不需要手动管理。

    6610

    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

    94030

    Android组件化开发思想与实践

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

    65920

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

    前言: 上一篇博客给大家聊了Intent的定义,分类、属性和功能,相信大家对于Intent在Android中的作用已经清楚,这一篇博客将会给大家聊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

    943100

    【译】现代化的PHP开发--TDD

    首先,它迫使我们在创建任何具体代码之前考虑代码设计,然后使我们能够重构代码库而不必担心会有副作用。从长远来看,它使我们的代码易于维护。...此阶段的结果是绿色测试。 重构阶段: 在重构阶段,我们专注于使代码简洁。由于我们已经在上面创建了可以防止bug产生副作用的测试,因此我们对执行重构抱有信心。...如果偶然地从重构中引入了一个错误,我们的测试将在其出现后立即报告它。因此,重构是在修改任何代码后立即运行测试的自然方法。 TDD 单元测试 TDD使我们可以测试驱动开发周期。...首先,我们创建一个新的public方法,该方法返回一个集合数据的数组作为test方法的参数,然后在test方法中添加注释以告知PHPUnit哪个方法将提供参数。...在这个阶段,我们将看一下我们先前编写的代码,并思考使它变得更简介,更好的方法。 我们在total方法中使用了foreach循环。它遍历$ items数组并返回每个元素的总和。

    1K20
    领券