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())代码>不应该存在。切勿将活动
视为普通课程。尽管您通过将活动传递给上下文似乎躲过了一劫。