我对android很新,我试图将我的活动中的值传递给我的服务。 我已经看到了关于这个问题的其他答案,但我找不到我的问题,价值没有传递给服务。 在我的活动中,我有一个搜索栏,我希望当我更改搜索栏的值("进度")并激活服务时,服务会收到该值。当我关闭应用程序时,该值返回零,应该是另一个。 在我的活动中,我使用sharePreferences保存了值。
活动
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
//SEEKBAR
textViewSensibilidad.setText("Sensibilidad: " + progress*100/seekBar.getMax()+"%");
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
progress = progresValue;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
textViewSensibilidad.setText("Sensibilidad: " + progress*100/seekBar.getMax()+"%");
//SAVE STATE SEEKBAR
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("progress", progress);
editor.commit();
}
});
//LOAD STATE SEEKBAR
sharedPreferences = getSharedPreferences("progress" , Context.MODE_PRIVATE);
progress = sharedPreferences.getInt("progress", progress);
seekBar.setProgress(progress);
}
public void onClick(View src) {
if(toggleButton.isChecked()){
Log.d(TAG, "onClick: starting srvice");
Intent intent = new Intent(ShakeActivity.this, MyService.class);
intent.putExtra("progress", progress);
startService(intent);
...
服务
public class MyService extends Service implements SensorEventListener {
private static final String TAG = "Servicio";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand (Intent intent, int flags, int startId){
super.onStartCommand(intent, flags, startId);
Toast.makeText(this, "Shake to Open Whatsapp Activada", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onStart");
if (intent !=null && intent.getExtras()!=null){
progress = intent.getExtras().getInt("progress");
checkeado=intent.getExtras().getBoolean("checkeado");
Toast.makeText(this, "progreso: "+progress+" checkeado: "+checkeado, Toast.LENGTH_SHORT).show();
}
return START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Shake to Open Whatsapp Desactivada", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onDestroy");
//player.stop();
mSensorManager.unregisterListener(this);
}
有什么建议吗?错误?我提前谢谢你
答案 0 :(得分:0)
由于您已将进度值存储为共享首选项,因此您的服务只能获取共享首选项值。无需将其作为值传递给服务。
答案 1 :(得分:0)
在您的服务中注册共享首选项侦听器。文档:
这将允许您使服务完全独立于活动,但在制作时会观察值的变化。
示例 - 使您的服务实现SharedPreferences.OnSharedPreferenceChangeListener
接口。然后在您的服务中定义以下方法:
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if ("progress".equals(key) {
int progress = sharedPreferences.getInt("progress", 0);
// we have a new value -> react here
}
}
最后不要忘记在onStartCommand
方法中注册听众:
SharedPreferences sharedPrefs = getSharedPreferences("progress", Context.MODE_PRIVATE);
sharedPrefs.registerOnSharedPreferenceChangeListener(this);