アプリにシェイク機能を含めようとしています。そのためには、ユーザーがアプリケーションのどこにいるかに関係なく、電話が揺れたときにアクティビティを意図する必要があります。ここで、センサー コードをアプリケーション クラスに配置しましたが、意図するためにはコンテキストが必要です。私は正しい道を進んでいますか、それともこの機能を実現する他の方法はありますか? これが私のコードです
public class MyApplication extends Application {
/* variables for shake detection */
private SensorManager mSensorManager;
private float mAccel; // acceleration apart from gravity
private float mAccelCurrent; // current acceleration including gravity
private float mAccelLast; // last acceleration including gravity
@Override
public void onCreate(){
/* sensor shake detection */
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
mAccel = 0.00f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;
}
private final SensorEventListener mSensorListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent se) {
float x = se.values[0];
float y = se.values[1];
float z = se.values[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
if(mAccel > 3.0f)
{
// Toast.makeText(getBaseContext(), "Phone shaked", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(),LiveSearchActivity.class);
startActivity(intent);
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
}