Imposta la data / ora / ora di Android programmaticamente
-
12-11-2019 - |
Domanda
Ho bisogno di impostare la data / ora da Android programmaticamente, ma non ho successo! Ho queste tre fonti sopra:
Codice sorgente 1
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
alarm.setTime(1330082817000);
.
AndroidManifest:
<uses-permission android:name="android.permission.SET_TIME" />
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
.
Eccezione:
Service fatal error : Unable to start activity ComponentInfo{br.com.tdta.service/br.com.tdta.service.Service}: java.lang.SecurityException: setTime: Neither user 10038 nor current process has android.permission.SET_TIME.
java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.tdta.service/br.com.tdta.service.Service}: java.lang.SecurityException: setTime: Neither user 10038 nor current process has android.permission.SET_TIME.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.SecurityException: setTime: Neither user 10038 nor current process has android.permission.SET_TIME.
at android.os.Parcel.readException(Parcel.java:1247)
at android.os.Parcel.readException(Parcel.java:1235)
at android.app.IAlarmManager$Stub$Proxy.setTime(IAlarmManager.java:237)
at android.app.AlarmManager.setTime(AlarmManager.java:289)
at br.com.tdta.service.Service.onCreate(Service.java:32)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
... 11 more
.
====
codice sorgente 2
boolean itsWork = SystemClock.setCurrentTimeMillis(1330082817000);
System.out.println(itsWork);
.
Manifest:
<uses-permission android:name="android.permission.SET_TIME" />
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
.
Itswork Valore:
.
false
====
codice sorgente 3
.
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd.hhmmss");
String data = format.format(new Date(1330082817000));
try {
Runtime.getRuntime().exec("date -s " + data);
} catch (IOException e) {
}
Cosa sto facendo male?
Grazie in anticipo!
Soluzione
L'applicazione utente non ha il permesso di modificare il tempo del dispositivo.Leggere la risposta da Cashbash in seguente post per l'opzione alternativa.
Copia qui per riferimento rapido:
Secondo Questo thread , le app utente non possono essere impostateil tempo, indipendentemente dalle autorizzazioni che lo diamo.Invece, l'approccio migliore è rendere l'utente impostato manualmente il tempo.Utilizeremo:
startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));
.
Sfortunatamente, non c'è modo di collegarli direttamente all'impostazione del tempo (che li salverà un altro clic).Facendo uso di ellapsedRealtime
, possiamo assicurarci che l'utente imposta correttamente il tempo.