Как передать логическое значение между намерениями

Мне нужно передать логическое значение и намерение и вернуться назад, когда нажата кнопка "Назад". Цель состоит в том, чтобы установить логическое значение и использовать условное условие для предотвращения нескольких запусков нового намерения при обнаружении события onShake. Я бы использовал SharedPreferences, но, похоже, он не играет хорошо с моим кодом onClick, и я не уверен, как это исправить. Любые предложения будут оценены!

public class MyApp extends Activity {

private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    mSensorListener = new ShakeEventListener();
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensorManager.registerListener(mSensorListener,
        mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
        SensorManager.SENSOR_DELAY_UI);


    mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {

      public void onShake() {
                              // This code is launched multiple times on a vigorous
                              // shake of the device.  I need to prevent this.
                  Intent myIntent = new Intent(MyApp.this, NextActivity.class);
                  MyApp.this.startActivity(myIntent);
      }
    });

}

@Override
protected void onResume() {
  super.onResume();
  mSensorManager.registerListener(mSensorListener,
      mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
      SensorManager.SENSOR_DELAY_UI);
}

@Override
protected void onStop() {
  mSensorManager.unregisterListener(mSensorListener);
  super.onStop();
}}

Ответы

Ответ 1

имеют переменную частного члена в вашей деятельности с именем wasShaken.

private boolean wasShaken = false;

измените свой onResume, чтобы установить это значение в false.

public void onResume() { wasShaken = false; }

в вашем слушателе onShake, проверьте, истинно ли это. если есть, возврат рано. Затем установите значение true.

  public void onShake() {
              if(wasShaken) return;
              wasShaken = true;
                          // This code is launched multiple times on a vigorous
                          // shake of the device.  I need to prevent this.
              Intent myIntent = new Intent(MyApp.this, NextActivity.class);
              MyApp.this.startActivity(myIntent);
  }
});

Ответ 2

Задайте замысел дополнительно (с помощью putExtra):

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("yourBoolName", true);

Получить дополнительный урон:

@Override
protected void onCreate(Bundle savedInstanceState) {
    Boolean yourBool = getIntent().getExtras().getBoolean("yourBoolName");
}