2014-04-04 83 views
0

我試圖讓應用程序保存天文鐘的時間,當手動關閉應用程序或設備重新啓動但我的代碼似乎無法工作時。android在關閉應用程序或重新啓動設備時調用方法

我在做什麼錯?如果我將下面的方法分配給一個按鈕,onCreate將起作用。我不能讓它在應用程序關閉時自動啓動。

protected void onDestroy() { 
     final Chronometer chrono9 = (Chronometer) findViewById(R.id.chronometer1); 



     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putLong("time", chrono9.getBase()); 
     editor.commit(); 
     super.onDestroy(); 

    } 




protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_mydialog); 





    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     Chronometer chrono9 = (Chronometer)findViewById(R.id.chronometer1); 
     chrono9.setBase(settings.getLong("time",11)); 
+0

你能張貼你在哪裏得到的「部分時間「從共享偏好? –

+0

檢查您如何閱讀sharedPreferances中的值。另外onDestory()是做最後的清理,所以你的喜好保存在onPause/onStop。 – Libin

+0

我添加了我的創建,從保存的偏好中獲取時間。當我用按鈕手動將時間存儲在保存的首選項中時,這部分工作。我無法在應用程序關閉時自動將其存儲。 – user2941841

回答

2

你是否在實施這項服務......?你需要做的是實現一個服務,當用戶關閉應用程序時開始運行,並且你將不得不實現一個廣播接收器,這樣你就能知道手機什麼時候重新啓動...

這是將成爲一個類...

public class StartMyServiceAtBootReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Intent startServiceIntent = new Intent(context, MyService.class); 
    context.startService(startServiceIntent); 
} 

這和你的清單...... !!

<receiver android:name="com.solmoviles.tmp.StartMyServiceAtBootReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

還有其他問題我會很樂意幫忙的!

+0

感謝您的幫助。這實際上不是一個服務,它只是一個簡單的天文臺,我已經在我的主要佈局中運行。如果我使用按鈕存儲時間,則可以使其工作,我只需要一種方法將其存儲到保存的偏好設置中以在應用關閉時自動觸發。 – user2941841

0

在我的特殊情況下,我所做的就是將存儲在共享的pref中的天文鐘與我開始使用的方法相同。

現在,當我重新啓動我的應用程序時,時間繼續滴答滴答,並沒有從關閉應用程序時的位置重置。

在我的方法是開始記時計:

... 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putLong("time", chrono9.getBase()); 
     editor.commit(); 

... 

在我上創建:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     Chronometer chrono9 = (Chronometer)findViewById(R.id.chronometer1); 
     chrono9.setBase(settings.getLong("time",11)); 

...

 chrono1 = (Chronometer) findViewById(R.id.chronometer1); 

... 
     chrono1.start(); 
相關問題