Question

J'ai besoin de définir la date / l'heure d'Android par programme, mais je n'ai pas de succès! J'ai ces trois sources ci-dessus:

Code source 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" />  

Exception:

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  

====

Code source 2

boolean itsWork = SystemClock.setCurrentTimeMillis(1330082817000);  
System.out.println(itsWork);  

Manifeste:

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

c'est du travail évaluer:

false  

====

Code source 3

SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd.hhmmss");
String data = format.format(new Date(1330082817000));
try {
    Runtime.getRuntime().exec("date -s " + data);
} catch (IOException e) {
}

Qu'est-ce que je fais mal?

Merci d'avance!

Était-ce utile?

La solution

L'application utilisateur n'a pas l'autorisation de modifier le temps de l'appareil. Veuillez lire la réponse par Cashbash dans le poste suivant pour l'option alternative.

Copie ici pour référence rapide:

Selon ce fil, les applications utilisateur ne peuvent pas définir l'heure, quelles que soient les autorisations que nous lui donnons. Au lieu de cela, la meilleure approche consiste à faire en sorte que l'utilisateur définisse le temps manuellement. Nous utiliserons:

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

Malheureusement, il n'y a aucun moyen de les lier directement au paramètre temporel (ce qui leur économiserait un clic de plus). En utilisant ellapsedRealtime, nous pouvons nous assurer que l'utilisateur définit correctement l'heure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top