2012-02-24 8 views
14

Potrzebuję ustawić datę i czas z Androidem programowo, ale nie mam sukcesu! mam te trzy źródła powyższe:Ustaw programowo datę/czas Androida.

kod źródłowy 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" /> 

Wyjątek:

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 

====

źródłowy kod 2

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

Oczywista:

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

itsWork wartość:

false 

====

kod źródłowy 3

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

Co robię źle?

Z góry dzięki!

+0

Będzie działać tylko na zrootowanym telefonie. I kontynuacja tutaj http://stackoverflow.com/questions/6584772/is-possible-to-set-system-datetime-from-my-android-app –

+0

This [odpowiedź] (http://stackoverflow.com/a/8752130/1833118) działa dla mnie na zrootowanym telefonie. – hengxin

Odpowiedz

12

Aplikacja użytkownika nie ma uprawnień do zmiany czasu urządzenia. Proszę przeczytać odpowiedź przez cashbash w following post dla opcji alternatywnej.

Kopiowanie tutaj podręczne:

Według this thread, aplikacje użytkownika nie można ustawić czas, niezależnie od uprawnień damy mu. Zamiast tego najlepszym sposobem jest ręczne ustawienie czasu przez użytkownika. Użyjemy:

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

Niestety, nie ma sposobu, aby połączyć je bezpośrednio z ustawieniem czasu (co zapisałoby je jeszcze jedno kliknięcie). Korzystając z ellapsedRealtime, możemy zapewnić, że użytkownik ustawia czas poprawnie.

+1

dzięki! Rozwiązałem to za pomocą: 'startActivity (new Intent (android.provider.Settings.ACTION_DATE_SETTINGS));' – eliangela

+2

Późna aktualizacja, ale może powinieneś sprawdzić zamiast mnie anser w odnośnym wątku. To nie jest wielka sprawa, o ile uzyskasz uprawnienia SET_TIME. – jek

+0

Jak ustawić datę i godzinę Androida os ustawioną w ustawieniach Androida? Czy funkcja Date() zwraca te znaki? –