在我的Android应用程序中,有一个Activity根据系统时间格式(12Hr。/ 24Hr。)显示时间字符串。 我正在编写espresso测试来测试这种行为是否时间显示随着系统时间格式的变化而变化。
为了达到这个目的,我想通过我的仪器测试来改变我的系统时间格式,以实现纯粹的测试目的。并且我已经在测试项目的清单中添加了权限,例如
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
并编写以下代码以更改系统时间格式
Context context = InstrumentationRegistry.getContext();
Settings.System.putString(context.getContentResolver(),Settings.System.TIME_12_24, "12");
它正在抛出Permission Denial
错误。 (您可以使用以下链接查看堆栈跟踪)
我无法理解,因为试图改变测试项目本身的系统时间格式并且它有权更改系统时间设置的代码,
我验证了使用此命令
adb shell dumpsys package com.my.app.package | grep permission
请告诉我,我在这里缺少什么?
答案 0 :(得分:0)
我已经找到了您的问题的解释。这是它:
用户应用程序无权更改设备 时间。请通过following post中的cashbash阅读答案 替代选项。
在此处复制以供快速参考:
根据this thread,用户应用无法设置时间, 不管我们给它的权限。相反,最好的方法 是让用户手动设置时间。我们将使用:
startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));
不幸的是,没有办法将它们直接链接到时间 设置(这将节省他们一次点击)。通过利用
ellapsedRealtime
,我们可以确保用户正确设置时间。
来自:Set Android's date/time programmatically
尝试使用uiatomator
而不是使用Espresso,因为该检测测试框架可以使用Dialogs,Marshmallow权限或锁屏执行操作。
与Espresso完美搭配。 查看此网站:http://qathread.blogspot.com/2015/05/espresso-uiautomator-perfect-tandem.html
希望有所帮助