【问题标题】:java.lang.SecurityException: Neither user 11029 nor current process has android.permission.SET_TIME_ZONEjava.lang.SecurityException:用户 11029 和当前进程都没有 android.permission.SET_TIME_ZONE
【发布时间】:2020-10-05 05:00:27
【问题描述】:

我正在开发一个以编程方式设置时区的旧项目,我正在将此项目迁移到 Api 28,它在 Kitkat 设备上正常工作,但在 Api 28 中,无法授予 SET_TIME_ZONE 权限,因为我知道它变成了系统级权限,不能用于应用。

我已添加此权限

<uses-permission android:name="android.Manifest.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.SET_TIME_ZONE"
    tools:ignore="ProtectedPermissions" />

而Activity的onCreate方法看起来是这样的

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 2654);
} 
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.setTimeZone("Asia/Tbilisi");

在 Api 28 或更高版本上出现错误

java.lang.SecurityException: Neither user 11029 nor current process has android.permission.SET_TIME_ZONE.

我想保留此功能,您有什么建议我应该使用什么来代替 AlarmManager.setTimeZone() 方法来更改系统时间?

【问题讨论】:

    标签: java android timezone alarmmanager android-permissions


    【解决方案1】:

    时区选择提示。如果需要用户选择特定的时区,请在打开设置活动前给用户留言提示。选择后,您可以检查系统时区是否符合预期并采取无论采取什么行动。

    startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));
    

    【讨论】:

    • 我不想让用户更改时区,这就是为什么我将时区设置为活动中的特定城市。
    • 目前,没有更改时区的方法,您可以选择显示一个对话框或其他内容,其中包含设置您想要的时区的说明,然后单击正面按钮,打开时区设置.当用户返回应用程序时,检查用户设置的时区并阻止应用程序的进度,直到用户设置您想要的时区,如果没有设置。
    猜你喜欢
    • 2015-10-09
    • 2017-05-27
    • 2018-11-17
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2019-01-09
    • 2018-03-21
    • 2015-12-20
    相关资源
    最近更新 更多