"自动日期和时间"以编程方式设置开/关

Aks*_*til 2 time networking datetime android

我需要从网络提供商或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);
Run Code Online (Sandbox Code Playgroud)

和许可

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
Run Code Online (Sandbox Code Playgroud)

但不工作,请告诉我出了什么问题,请告诉我们是否还有其他解决办法

Rah*_*til 10

只有系统应用程序可以设置值,即使安装的应用程序具有权限,也无法更改.

检查自动时间pref时的代码

Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME)
Run Code Online (Sandbox Code Playgroud)

要读取自动时区pref的代码选中

Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME_ZONE)
Run Code Online (Sandbox Code Playgroud)

您可以要求用户设置它们是否关闭.

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

以下是设置时间的代码

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);
Run Code Online (Sandbox Code Playgroud)

需要许可: <uses-permission android:name="android.permission.SET_TIME" />