[解決済み】デバイスを振ったときにアプリを更新するには?
2022-04-04 15:26:53
質問
Androidアプリケーションを更新するために、シェイク機能を追加する必要があります。
ドキュメントを探しても
SensorListener
しかし、Eclipse はそれが非推奨であり
SensorEventListener
.
このようなものを作るにはどうしたらいいか、いいガイドをお持ちの方はいらっしゃいませんか?
shake controller
?
解決方法は?
以下はコード例です。 これをアクティビティクラスに記述してください。
/* put this into your activity class */
private SensorManager mSensorManager;
private float mAccel; // acceleration apart from gravity
private float mAccelCurrent; // current acceleration including gravity
private float mAccelLast; // last acceleration including gravity
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
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
mSensorManager.unregisterListener(mSensorListener);
super.onPause();
}
そして、これをonCreateメソッドに追加してください。
/* do this in onCreate */
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;
そして、アプリケーションの好きな場所で、軸から独立した、重力のような静的加速度からクリーンな現在の加速度を "mAccel" に問い合わせることができます。 この値は、何も動いていなければ約0、デバイスが揺れている場合は例えば2です。
コメントに基づいて - これをテストするために。
if (mAccel > 12) {
Toast toast = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG);
toast.show();
}
注意事項
加速度センサーを無効にする必要があります オンポーズ を起動し オンレジューム CPUやバッテリーのリソースを節約するためです。 このコードでは、私たちが地球上にいると仮定して、加速度を地球の重力に初期化します。そうしないと、アプリケーションが起動し、自由落下から地面に衝突したときに、強い揺れを感じることになります。しかし、このコードはローカットフィルターによる重力に慣れるので、一度初期化すれば他の惑星や自由空間でも動作するようになります。 (アプリケーションはいつまで使われるかわからないですからね...。)
関連
-
[解決済み】com.android.ide.common.process.ProcessException: aaptの実行に失敗しました! どうすればいいですか?
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】sendUserActionEvent()がnullである。
-
[解決済み] com.android.supportのライブラリは全て全く同じバージョン表記である必要があります。
-
[解決済み] ADBエラー:デーモンに接続できない
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Android端末からローカルホストにアクセスするにはどうすればよいですか?
-
[解決済み] デバイスの現在の言語を取得する
-
[解決済み] アイコンのミップマップ描画可能
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] シンボル 'context' を解決できない
-
[解決済み] 設定 ':classpath' の依存関係をすべて解決できなかった。
-
[解決済み】フラグメントMyFragmentがアクティビティにアタッチされない。
-
[解決済み】Build Tools リビジョン 23.0.1 の検索に失敗しました。
-
[解決済み】getCheckedRadioButtonId()が無駄なintを返す?
-
[解決済み】Couldn't load memtrack module Logcat Error
-
[解決済み] sendUserActionEvent() は null です。
-
[解決済み] Android SDK の場所には空白を含めないでください。NDK ツールで問題が発生するためです。
-
[解決済み] Android M パーミッション : shouldShowRequestPermissionRationale()関数の使用方法について混乱しています。
-
[解決済み] Androidのローテーションでアクティビティを再開する