Как вернуть результат из широковещательного приемника в MainActivity с помощью SharedPreferences

Когда я работаю с широковещательными приемниками, я сталкиваюсь с проблемой отправки результата широковещательного приемника в MainActivity с использованием общих настроек.
MainActivity.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);
        }
    }

Я хочу получить уровень, то есть текущий уровень заряда батареи из класса Broadcast Receiver для SharedPreferences, как я могу получить это из общих настроек. Я связываюсь, чтобы получить это в классе широковещательного приемника, который не позволяет мне делиться этим значением.
MyBroadcastClass.java

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, которую невозможно сохранить в Sting, я также привязываю этот getString (R.string.BATTERY_LEVEL);
мой файл values ​​/ string.xml, подобный этому

<resources>
    <string name="app_name">BatteryLevelChecking</string>
    <string name="BATTERY_VERY_DANGER">please charge your battery in danger level</string>
    <string name="BATTERY_DANGER">Please charge your battery low</string>
    <string name="BATTERY_OK">Battery ok to use your mobile</string>
    <string name="BATTERY_GOOD">Battery is good</string>
    <string name="BATTERY_FULL">Battery Full please unplug charger</string>
    <integer name="BATTERY_LEVEL">10</integer>

</resources>

этот также дает ту же ошибку. в чем проблема,
и как я могу сохранить значение int в строковый файл




Ответы (1)


Вы можете установить SharedPreferences.OnSharedPreferenceChangeListener в своей деятельности. Поэтому всякий раз, когда в SharedPreferences произойдут какие-либо изменения, вы получите уведомление в своей деятельности.

Для справки https://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

person Nitesh    schedule 05.12.2016
comment
я получаю сообщение об ошибке во время добавления файла Integer в SharedPreferences в MySharedPreferencesClass.java, пожалуйста, проверьте эту строку один раз. SharedPreferences sharedPreferences = context.getSharedPreferences (getString (R.integer.BATTERY_LEVEL), Context.MODE_PRIVATE); - person sreeku24; 05.12.2016
comment
почему вы помещаете BATTERY_LEVEL как целое число и пытаетесь получить его как строку,.? Какая от этого польза? ‹String name = BATTERY_LEVEL› 10 ‹/string› Только так. - person Nitesh; 05.12.2016
comment
нехорошо использовать Integer вместо sting или, по крайней мере, это правильный способ, пожалуйста, дайте мне разъяснение - person sreeku24; 05.12.2016
comment
Файл string.xml должен содержать все строки. для хранения целых чисел есть файл inteers.xml. и получить целые числа из этого файла getResources (). getInteger (R.integer.maximum); это код stackoverflow.com/questions/19297522/ ссылка - person Nitesh; 05.12.2016
comment
Спасибо, братан, я доволен твоим ответом. Большое спасибо за то, что поторопили ваше ценное, чтобы дать ответ. - person sreeku24; 05.12.2016
comment
Рад помочь :) и на ТАК мы отмечаем правильный ответ, который решает нашу проблему. - person Nitesh; 05.12.2016