ブール値をインテントに渡し、戻るボタンが押されたときに再度戻す必要があります。目標は、ブール値を設定し、条件を使用して、onShakeイベントが検出されたときに新しいインテントが複数起動されないようにすることです。私はSharedPreferencesを使用しますが、onClickコードでNiceを再生しないようで、それを修正する方法がわかりません。任意の提案をいただければ幸いです!
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();
}}
wasShakenと呼ばれるアクティビティにプライベートメンバー変数があります。
private boolean wasShaken = false;
onResumeを変更して、これをfalseに設定します。
public void onResume() { wasShaken = false; }
onShakeリスナーで、trueかどうかを確認します。もしそうなら、早く戻ります。次に、それを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);
}
});
インテントエクストラを設定する(putExtraを使用):
Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("yourBoolName", true);
追加のインテントを取得:
@Override
protected void onCreate(Bundle savedInstanceState) {
Boolean yourBool = getIntent().getExtras().getBoolean("yourBoolName");
}
これはKotlinで行う方法です。
val intent = Intent(this@MainActivity, SecondActivity::class.Java)
intent.putExtra("sample", true)
startActivity(intent)
var sample = false
sample = intent.getBooleanExtra("sample", sample)
println("sample")
出力サンプル= true