브로드 캐스트 수신기로 작업 할 때 공유 기본 설정을 사용하여 브로드 캐스트 수신기의 결과를 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 값을 절약 할 수있는 방법
참조 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
왜 "BATTERY_LEVEL"을 정수로두고 문자열로 가져 오려고합니까? 그렇게하는 것의 이점은 무엇입니까? 10 이렇게 만하십시오. –
Nitesh
문자열 대신에 정수를 쓰는 것이 좋지 않거나 적어도 정확한 방법입니다. – sreeku24