web-dev-qa-db-fra.com

Définir la date / l'heure d'Android par programmation

J'ai besoin de régler la date/heure de 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" />  

itsWork valeur:

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!

18
eliangela

L'application utilisateur n'est pas autorisée à modifier l'heure de l'appareil. Veuillez lire la réponse par cashbash dans le post suivant pour l'option alternative.

Copie ici pour référence rapide:

Selon ce fil , les applications utilisateur ne peuvent pas régler l'heure, quelles que soient les autorisations que nous leur accordons. Au lieu de cela, la meilleure approche consiste à obliger l'utilisateur à régler l'heure manuellement. Nous utiliserons:

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

Malheureusement, il n'y a aucun moyen de les lier directement au réglage de l'heure (ce qui les sauverait un clic de plus). En utilisant ellapsedRealtime, nous pouvons nous assurer que l'utilisateur règle l'heure correctement.

14
Praful Bhatnagar