gpt4 book ai didi

android - Android测试用例中的权限

转载 作者:行者123 更新时间:2023-11-29 16:23:05 25 4
gpt4 key购买 nike

我的应用程序应该在一段时间后(几小时或几天)发生一些变化,我想测试一下。

我尝试在我的单元测试中使用 SystemClock.setCurrentTimeMillis() 来模拟时间/日期的变化,但没有任何运气。

我声明了 <uses-permission android:name="android.permission.WRITE_SETTINGS" />在应用程序和测试应用程序的 list 中,这并没有改变任何东西。

此时,我正在模拟器上运行这些测试,如果有任何不同...

编辑:在 Nick 的帮助下,还请求了 SET_TIME 权限:

<uses-permission android:name="android.permission.SET_TIME" />

但是现在,logcat 显示:

WARN/PackageManager(59): Not granting permission android.permission.SET_TIME to package com.matthieu.tests (protectionLevel=3 flags=0xbe46)

另一个编辑:随着 dtmilano 的回答...

在我的测试中添加了这段代码(使用正确的 try/catch):

Runtime.getRuntime().exec("date \"$((10800 + $(date +%s)))\"").waitFor();

当我继续使用 shell 时,我可以毫无问题地运行该命令,并且我看到模拟器中的时间发生了变化(我正在尝试增加 3 小时)。当我用我的代码运行测试时,时间根本没有改变......?

我在命令行上做的是:

date "$((10800 + $(date +%s)))"

我怀疑我是否需要在 Runtime.exec 中添加“adb shell”部分...

这似乎是在正确的道路上,但仍然无法让它运行。它也可能与 Nick 指出的一样,即它需要一个系统进程才能更改时间......?

最佳答案

如果您需要更改时区,请将 android.permission.SET_TIME_ZONE 添加到您的 list 中,

然后从您的 Activity (或任何您需要的地方..但您需要获取适当的上下文..)

Context context = getContext(); // or (Context) this, or whatever depending on where you are
AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
mgr.setTimeZone(timezoneid); // replace timezoneid with the time zone you need e.g. "pacific/Auckland"
mgr.setTime(timeinmillis); // replace timeinmillis with the time you need in millis, probably from a Date or Calendar object... but watch the timezone in the calendar ;-)

重点是 AlarmManager 系统服务包含设置系统时间和时区的成员..

关于android - Android测试用例中的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com