小编Alt*_*iew的帖子

以编程方式设置系统时间

我意识到这个问题出现在 SO 的其他地方,但是我已经尝试了我可以在网站上找到的所有解决方案,但仍然遇到困难。这些问题(和他们的回答)也已经有好几年了,与其对旧问题发表评论,我想我会在这里为其他人整合信息,并调查从那时到现在与 Android 相关的潜在变化。不过,如果您觉得这个问题有资格作为重复,请将其标记为重复。

编辑:正如我所说,关于 SO 的其他答案并没有解决问题。我不明白用“对我不起作用”来评论每一个潜在的修复如何有助于帮助自己和其他人解决问题,但如果是这样,那就这样吧。作为参考,有 3 个人将这些问题标记为可能与此问题重复,因此我将这些无效的答案添加到下面的列表中。

我的应用程序有一些非常具体的需求,但为了简洁起见,让我们假设我需要手动将系统时间和日期设置为固定值。下面我详细说明了我在尝试使其工作的过程中取得的一些进展。

该应用程序的最低 SDK 版本为 24,并且目标是 24。其他人发现他们需要将版本增加到这个级别。

设备已root,应用程序正在安装到/system/app,以便我可以更改日期/时间。

有人评论说,应用程序完全不可能设置时间,但是查看诸如 ClockSync 之类的应用程序,情况似乎并非如此。我知道我的应用程序将无法在 Play 商店中使用。

该应用程序必须在没有用户输入的情况下自动设置日期/时间,因此使用以下代码让用户设置它无济于事;

startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));
Run Code Online (Sandbox Code Playgroud)

我以两种方式将设置时间权限添加到清单中,单独添加,然后一起添加。我还尝试添加有关删除 maxSDKversion 的部分。

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

<permission android:name="android.permission.SET_TIME"
    android:protectionLevel="signature|system"/>
Run Code Online (Sandbox Code Playgroud)

我读过某些权限不仅需要清单条目,还需要用户接受和允许它们。但是,SET_TIME 并未列在其中。无论如何,我确实尝试过这样做,但是我的许可请求被自动拒绝而没有显示确认框,可能是因为它实际上并不首先需要许可。

我用来尝试设置时间的代码如下:

try {
        Calendar c = Calendar.getInstance();
        c.set(2017, 11, 21, 12, 32, 30);
        AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        am.setTime(c.getTimeInMillis());
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
    }
Run Code Online (Sandbox Code Playgroud)

失败时我在祝酒中收到的错误是:

java.lang.securityexception: setTime: neither user 10051 nor current process has …
Run Code Online (Sandbox Code Playgroud)

java time android date programmatically

5
推荐指数
1
解决办法
6354
查看次数

标签 统计

android ×1

date ×1

java ×1

programmatically ×1

time ×1