2012-02-24 117 views
14

我需要以編程方式從Android設置日期/時間,但我沒有成功! 我有這三個來源以上:以編程方式設置Android的日期/時間

源代碼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" /> 

例外:

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 

====

源代碼2

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

清單:

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

itsWork值:

false 

====

源代碼3

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

我在做什麼錯?

在此先感謝!

+0

它只適用於固定電話。和後續這裏http://stackoverflow.com/questions/6584772/is-possible-to-set-system-datetime-from-my-android-app – 2012-02-24 16:23:44

+0

This [answer](http://stackoverflow.com/a/8752130/1833118)適用於我的手機。 – hengxin 2014-06-22 03:13:58

回答

12

用戶應用程序無權更改設備時間。請在following post中以cashbash的方式閱讀備選方案的答案。

複製在這裏爲快速參考:

this thread,用戶的應用程序不能設置時間,不管我們給它的權限。相反,最好的方法是讓用戶手動設置時間。我們將使用:

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

不幸的是,有沒有辦法將它們直接鏈接到時間設置(這將節省他們多一個點擊)。通過使用ellapsedRealtime,我們可以確保用戶正確設置時間。

+1

謝謝!我解決了這個問題:'startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));' – eliangela 2012-02-24 18:26:43

+2

延遲更新,但也許你應該在引用的問題線程中檢查我的anser。只要您可以獲得SET_TIME權限,這不是什麼大問題。 – jek 2012-07-29 11:18:00

+0

如何獲取Android設置的Android操作系統時間和日期? Date()是否返回這些? – 2015-11-11 08:21:04

相關問題