2015-01-18 3 views
0

Я довольно новичок в 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

возможно дубликат [Пример: Связь между активностью и услуг с использованием сообщений] (http://stackoverflow.com/questions/4300291/example-communication-between-activity-and-service-using-messaging) – Simon

ответ

0

Поскольку вы уже сохраняете значение прогресса в качестве общего предпочтения, ваша служба может просто получить общее значение предпочтения. Нет необходимости передавать его как ценность для службы.

+0

, но почему, когда я закрываю ход приложения, 0? :/ –

0

В вашей службе зарегистрируйте общий прослушиватель предпочтений. Docs здесь:

http://developer.android.com/reference/android/content/SharedPreferences.html#registerOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener)

Это позволит сделать сервис полностью независимым от деятельности еще наблюдать изменения значений, когда они сделаны.

Пример - сделать свой сервис реализованным интерфейсом 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); 
+0

Thx. пока не работает, но тогда я лучше проанализирую и снова отвечу. –

+0

Проблема заключается в том, что я закрываю приложение. сервис работает, но прогресс равен нулю (я проверял тост). Я что-то делаю неправильно, но я знаю, что это так. –