Android OnReceive中使用的共享首选项不更新

Android OnReceive中使用的共享首选项不更新,android,broadcastreceiver,Android,Broadcastreceiver,我有一个跟踪电池信息并将其存储在共享首选项中的服务。然后,从我的主要活动中,我有了BroadcastReceiver(这是OnReceive,用于收听ACTION\u BATTERY\u CHANGED) 每次OnReceive发生时,电池电量和温度都会发生变化,但我的共享首选项保持不变,直到我改变屏幕方向为止(我认为这是因为活动的娱乐性)。 请帮助我以某种方式使onReceive方法也更新共享首选项 我的主要活动: public class MainActivity extends Activ

我有一个跟踪电池信息并将其存储在共享首选项中的服务。然后,从我的主要活动中,我有了
BroadcastReceiver
(这是
OnReceive
,用于收听
ACTION\u BATTERY\u CHANGED

每次OnReceive发生时,电池电量和温度都会发生变化,但我的共享首选项保持不变,直到我改变屏幕方向为止(我认为这是因为活动的娱乐性)。 请帮助我以某种方式使onReceive方法也更新共享首选项

我的主要活动:

public class MainActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        appPrefs = new AppPreferences(getApplicationContext());
    }
    ......

    /* Broadcast Receiver for battery stats  */
    BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
        .....
        private TextView text;
        int level = -1;

        @Override   
        public void onReceive(Context context, Intent intent) {

            level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            text=(TextView) findViewById(R.id.TV_text);
            text.setText("level"+level+"something from Shared Pref"+appPrefs.getAnything());
        }
    }
}  
我的共同偏好:

public class AppPreferences extends PreferenceActivity {

    private static final String APP_SHARED_PREFS = "com.aydabtu.BroadcastSMS_preferences"; //  Name of the file -.xml
         private SharedPreferences appSharedPrefs;
         private Editor prefsEditor;

         public AppPreferences(Context context)
         {
             this.appSharedPrefs = context.getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE);
             this.prefsEditor = appSharedPrefs.edit();
         }

         public long getAnything() {
             return appSharedPrefs.getLong("Anything", 9);

         }

         public void setAnything(long a) {
             prefsEditor.putLong("Anything", a);
             prefsEditor.commit();
         }
我的服务:

BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        ......
        appPrefs.setAnything(a);
那个么,为什么在OnReceive方法中共享首选项不更新为级别或温度呢?
那怎么办呢?任何帮助都将不胜感激。:)

最后,经过这么多的研究,我可以让它工作了:只需添加以下内容:

private Intent starterIntent;
在类名上方的“类成员”区域中,在我的主类下面的示例中:

public class MainActivity extends Activity {
private Intent starterIntent;
然后,您可以将代码放在任何地方,以便在不向用户显示的情况下刷新活动:

                            finish();
                            starterIntent.setFlags(intent.FLAG_ACTIVITY_NO_ANIMATION);
                            startActivity(starterIntent);
                            overridePendingTransition(0,0);

为什么要把long放在布尔首选项中?@draksia因为之前我需要long,我用纳秒计算时间,我可以将它转换为int,但它能解决我的问题吗?:)为什么要明确地实例化一个活动?这就是从一开始就带来麻烦的方法,即使代码确实有效。@A--C你是什么意思?它不是完整的代码,以节省您的时间,只有有价值的信息,使重点view@whiteLT我知道这个代码不完整。我的意思是
appPrefs=newapppreferences(getApplicationContext())不应该存在。切勿将
活动
视为普通课程。尽管您通过将活动传递给上下文似乎躲过了一劫。