如何使用SharedPreferences将结果从广播Receiver返回到MainActivity

时间:2016-12-05 08:00:51

标签: android sharedpreferences android-broadcast android-broadcastreceiver android-sharedpreferences

当我使用广播接收器时,我遇到了使用共享偏好将广播接收器的结果发送到MainActivity的问题 MainActivity.java

String toSmallCaps(String input)

我想从Shared Receiver类获取SharedPreferences的级别,即当前电池电量 我如何从共享偏好中获取此信息。 我想在广播接收机课上得到这个,不允许我分享这个价值 MyBroadcastClass.java

public class MainActivity extends AppCompatActivity {
    private TextView mBatteryLevelText;
    private ProgressBar mBatteryLevelProgress;
    private BroadcastReceiver mReceiver;
    RelativeLayout relativeLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBatteryLevelText=(TextView)findViewById(R.id.battery_text);
        mBatteryLevelProgress=(ProgressBar)findViewById(R.id.battery_progress);
        //mReceiver=new BatteryLevelBroadcastReceiver();
        relativeLayout=(RelativeLayout)findViewById(R.id.main_background);
    }
    public void batteryLevelCheck(View view){
        IntentFilter intentFilter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        mReceiver=new MyBroadcastClass();
        registerReceiver(mReceiver,intentFilter);
 SharedPreferences sharedPreferences=context.getSharedPreferences(getString(R.integer.BATTERY_LEVEL),Context.MODE_PRIVATE);
int level=Integer.parseInt(getString(R.integer.BATTERY_LEVEL),0);
        if (level<=10){
            mBatteryLevelText.setText(getString(R.string.BATTERY_VERY_DANGER)+":"+level);
            mBatteryLevelProgress.setProgress(level);
            relativeLayout.setBackgroundColor(Color.RED);
        }
        if (level<=20){
            mBatteryLevelText.setText(getString(R.string.BATTERY_DANGER)+":"+level);
            mBatteryLevelProgress.setProgress(level);
            relativeLayout.setBackgroundColor(Color.YELLOW);
        }
        if (level<=10){
            mBatteryLevelText.setText(getString(R.string.BATTERY_OK)+":"+level);
            mBatteryLevelProgress.setProgress(level);
            relativeLayout.setBackgroundColor(Color.BLUE);
        }
        if (level<=10){
            mBatteryLevelText.setText(getString(R.string.BATTERY_FULL)+":"+level);
            mBatteryLevelProgress.setProgress(level);
            relativeLayout.setBackgroundColor(Color.GREEN);
        }
    }

这里共享首选项给出了这样的错误,无法存储在Sting中, 我也绑这个 getString(R.string.BATTERY_LEVEL);
我的values / string.xml文件就像这样

public class MyBroadcastClass extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
        SharedPreferences sharedPreferences=context.getSharedPreferences(getString(R.integer.BATTERY_LEVEL),Context.MODE_PRIVATE);
      SharedPreferences.Editor editor=sharedPreferences.edit();
        editor.putInt("key1",level);
        editor.commit();
        Toast.makeText(context.getApplicationContext(),"Broadcast Received",Toast.LENGTH_LONG).show();
    }
}

这个也给出了同样的错误。 这里有什么问题 以及如何将int值保存到字符串文件

1 个答案:

答案 0 :(得分:0)

您可以在活动中设置SharedPreferences.OnSharedPreferenceChangeListener。因此,只要SharedPreferences发生任何变化,您就会在活动中收到通知。

供参考https://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html