0

브로드 캐스트 수신기로 작업 할 때 공유 기본 설정을 사용하여 브로드 캐스트 수신기의 결과를 MainActivity로 보내는 데 문제가 있습니다.
MainActivity.java브로드 캐스트에서 결과를 얻는 방법 SharedPreferences를 사용하여받는 사람 MainActivity

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); 
     } 
    } 

나는, 즉 된 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(); 
    } 
} 

공유 환경 설정은 오전이 에는 getString (R.string.BATTERY_LEVEL)를 묶는, 스팅에 저장하지 않도록 가능한이 INT 같은 오류를 제공; 이

<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> 

이와 같은
내 값/string.xml 파일은 같은 오류를 제공합니다. 문제가 여기
내가 문자열 파일에 int 값을 절약 할 수있는 방법

답변

0

당신은 당신의 활동에 SharedPreferences.OnSharedPreferenceChangeListener을 설정할 수있는. 따라서 SharedPreferences에 변경 사항이있을 때마다 귀하의 활동 내에서 통지 받게됩니다.

+0

참조 https://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html를 들어

은 한 번이 줄을 확인하시기 바랍니다 것입니다 MySharedPreferencesClass.java에 된 SharedPreferences에 정수 파일을 추가시 오류를 얻고있다. SharedPreferences sharedPreferences = context.getSharedPreferences (getString (R.integer.BATTERY_LEVEL), Context.MODE_PRIVATE); – sreeku24

+0

왜 "BATTERY_LEVEL"을 정수로두고 문자열로 가져 오려고합니까? 그렇게하는 것의 이점은 무엇입니까? 10 이렇게 만하십시오. – Nitesh

+0

문자열 대신에 정수를 쓰는 것이 좋지 않거나 적어도 정확한 방법입니다. – sreeku24

관련 문제