0

こんにちは私はsharedPreferencesに保存されている値の一部が毎週リセットされるアプリをセットアップしようとしています。次のように、ボタンがクリックされたときに開始するようにアラームマネージャを設定しました。

public class EditPreferences extends PreferenceActivity implements
SharedPreferences.OnSharedPreferenceChangeListener, OnClickListener {

Button button;
Toast mToast;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.prefsbuttons);
button = (Button) findViewById(R.id.bPrefButton);
button.setOnClickListener(this);
addPreferencesFromResource(R.xml.preferences);
getPreferenceManager().getSharedPreferences().
registerOnSharedPreferenceChangeListener(this);


 }

 protected void onDestroy() {
 getPreferenceManager().getSharedPreferences().
unregisterOnSharedPreferenceChangeListener(this);

 @overide
 super.onDestroy();
 public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.bPrefButton:
     Intent intent = new Intent(EditPreferences.this, RepeatingAlarm.class);
     PendingIntent sender = PendingIntent.getBroadcast(EditPreferences.this,
             0, intent, 0);
    SharedPreferences userPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());
    Editor editor = userPrefs.edit();
    editor.putInt("savedFlash23", 0);
    editor.putInt("savedFlash4", 0);
    editor.putInt("savedFlash5", 0);
    editor.putInt("savedClean23", 0);
    editor.putInt("savedClean4", 0);
    editor.putInt("savedClean5", 0);
    editor.putInt("savedDog23", 0);
    editor.putInt("savedDog4", 0);
    editor.putInt("savedDog5", 0);
    editor.commit();

     // We want the alarm to go off 30 seconds from now.
     long firstTime = SystemClock.elapsedRealtime();
     firstTime += 15*1000;

     // Schedule the alarm!
     AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
     am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                     firstTime, 15*1000, sender);

     // Tell the user about what we did.
     if (mToast != null) {
         mToast.cancel();
     }

     mToast = Toast.makeText(getBaseContext(), "first toast message",
             Toast.LENGTH_LONG);
     mToast.show();
 }


}



 } 

トーストメッセージが表示され、共有設定がリセットされます。

インテントはリスナーのクラスに渡され、次のコードがあります。

public class RepeatingAlarm extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "repeat toast message",
            Toast.LENGTH_LONG).show();
    SharedPreferences userPrefs= PreferenceManager.getDefaultSharedPreferences(context);
    Editor editor = userPrefs.edit();
    editor.putInt("savedFlash23", 0);
    editor.putInt("savedFlash4", 0);
    editor.putInt("savedFlash5", 0);
    editor.putInt("savedClean23", 0);
    editor.putInt("savedClean4", 0);
    editor.putInt("savedClean5", 0);
    editor.putInt("savedDog23", 0);
    editor.putInt("savedDog4", 0);
    editor.putInt("savedDog5", 0);
    editor.commit();
}

}

トーストメッセージが表示されますが、共有設定の値がリセットされなくなりました。

4

1 に答える 1

0

解決策は、放送受信機で多くのことをしようとしないことのようです。次のコードを使用して新しいインテントを起動しました。これにより、共有設定に通常どおりアクセスできる Activity を拡張するクラスが開きます。

Intent i = new Intent(context, Reset.class);

    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    context.startActivity(i);
于 2012-08-20T07:51:11.550 に答える