【问题标题】:"Automatic date&time" set on/off programmatically“自动日期和时间”以编程方式设置开/关
【发布时间】:2015-12-03 03:26:06
【问题描述】:

我需要从网络提供商或 gps 提供商处设置当前日期和时间, 我试过了,但没有成功

String timeSettings = android.provider.Settings.System.getString(
            this.getContentResolver(),
            android.provider.Settings.System.AUTO_TIME);
    if (timeSettings.contentEquals("0")) {
        android.provider.Settings.System.putString(
                this.getContentResolver(),
                android.provider.Settings.System.AUTO_TIME, "1");
    }
    timeSettings = android.provider.Settings.System.getString(
            this.getContentResolver(),
            android.provider.Settings.System.AUTO_TIME);

和许可

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

但不工作,请告诉发生了什么问题,并请告诉是否有任何其他解决方案

【问题讨论】:

    标签: android datetime networking time


    【解决方案1】:

    只有系统应用可以设置值,安装的应用即使有权限也不能更改。

    auto time pref被选中时读取的代码

    Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME)
    

    如果自动时区首选项被选中则读取的代码

    Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME_ZONE)
    

    您可以要求用户设置是否关闭。

    您可以通过读取所需值以编程方式设置时间和时区。

    以下是设置时间的代码

    long now = // time set from timepicker or servertime 
    int year, month, day; // from timepicker
    
    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, year);
    c.set(Calendar.MONTH, month);
    c.set(Calendar.DAY_OF_MONTH, day);
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    
    am.setTime(now);
    

    需要权限:&lt;uses-permission android:name="android.permission.SET_TIME" /&gt;

    【讨论】:

    • 谢谢拉胡尔,你的意思是我必须从服务器获取时间并使用 SystemClock.setCurrentTimeMillis() 设置时间
    • 我刚刚使用了这个日历 c = Calendar.getInstance(); c.set(2015, 1, 1, 12, 00, 00); System.setCurrentTimeMillis(c.getTimeInMillis());它显示“系统类型的方法 setCurrentTimeMillis(long) 未定义”错误
    • 对不起,这是我的错误 SystemClock.setCurrentTimeMillis(c.getTimeInMillis());使用“setCurrentTimeMillis()”不会改变系统时间,如果您有任何其他解决方案,请告诉我
    • 让我知道你到底能做什么,改变系统时间的代码? , 一个已安装的应用程序无法更改时区。
    • 是的,我需要更改系统时间的代码,好的,我现在已经使用了这个 startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));它导航以更改自动日期和时间跨度>
    【解决方案2】:

    作为更新的答案,这适用于Settings.Global

     @RequiresPermission("android.permission.WRITE_SETTINGS")
        public void setSettingsAutomaticDateTimeIfNeeded() {
            String timeSettings = android.provider.Settings.Global.getString(
                    this.getContentResolver(),
                    android.provider.Settings.Global.AUTO_TIME);
            if (timeSettings.contentEquals("0")) {
                android.provider.Settings.Global.putString(
                        this.getContentResolver(),
                        android.provider.Settings.Global.AUTO_TIME, "1");
            }
        }
    

    于 2018 年 10 月测试。

    【讨论】:

    • 不需要 WRITE_SECURE_SETTINGS 权限就可以工作吗?
    • @AntonioVlasic 在我的 Android 6.0.1 上,它确实需要 WRITE_SECURE_SETTINGS 权限(也需要是系统应用程序,这对我们来说很好,因为它是我们自己的自定义 rom,但可能成为别人的问题)。
    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多