2012-10-26 39 views
0

服務中的變量的值我的程序是一個活動來標識用戶時,通過按下按鈕識別該用戶發送字符串到另一個類(alarmChecker),擴展到服務。如果數據庫的值已更改,並且您注意到更改啓動,則此服務每30秒檢查一次。消除在android

發送的主類的字符串(MainActivity)我不喜歡這樣寫道:

// Class MainActivity 

    Intent intent = new Intent (MainActivity.this, alarmChecker.class); 

    Bundle data = new Bundle(); 
    data.putString ("user", user); 
    intent.putExtras (data); 
    pendingIntent = PendingIntent.getService (MainActivity.this, 0, intent, 0); 

則類「alarmChecker」接收參數如下:

// class alarmChecker 

    @Override 
public int onStartCommand(Intent intent, int flags, int startId){ 
    super.onStartCommand(intent, flags, startId); 
// Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show(); 

Bundle data = intent.getExtras(); 

user = data.getString("user"); 

Toast.makeText(getApplicationContext(), "user: "+user, Toast.LENGTH_LONG).show(); 
} 

,我想如果用戶按下Return按鈕或退出應用程序並返回到主屏幕(MainActivity)並與另一個不同的用戶進行身份識別,則AlarmChecker類將採用新值,但問題在於抓取。始終保持您第一次輸入的值。

如何解決?

感謝您的回答和問候。

+0

你在用pendingIntent做什麼?如果您使用AlarmManager定期啓動服務,然後更改pendingIntent,那麼AlarmManager將不會更改,它是使用第一個設置的 - 在啓動AlarmManager之後更改它不會更改更改交付的Intent或與之相關的額外內容。 – JRaymond

回答

0

爲了您的眼前問題,你的服務可以與新值進行更新,如果你在你的服務實現onStartCommand() - 它被稱爲每次服務接收開始的意圖,不管它是否已經開始時間..

與這個問題無關,從長遠來看,您可能會考慮重新考慮您的設計,因爲通過ContentObserver API來查看數據庫對您而言是一個已解決的問題,您可以從數據庫中完成這種事件,聽起來就像您正在尋找的那樣。

+0

對不起,但不工作,我嘗試onStartCommand()方法,但仍然這樣做。我在代碼中編輯我上面所說的。 – sergio

+0

在上面的例子中,Bundle data = intent.getExtras()',但是在你從'datos'拉下的下一行。這是你的代碼真的看起來如何?或者只是一個錯字? – JRaymond

+0

對不起,我西班牙語,我將代碼從西班牙語更改爲英語,但這是相同的。 spanis中的數據是datos,對此很抱歉。 – sergio