その結果、近接センサー(近接センサー)からの情報を使用することが決定されました。 アイデアの本質は、センサーからの近接信号が表示されたときにトラックを切り替えることです。
それでは、修正に進みましょう。 近接センサーを使用するには、アプリケーションでその「リスニング」を有効にする必要があります。 これは前の記事で行われましたが、念のため、構成コードを示します。
/** * Setup the accelerometer. */ private void setupSensor() { if (mSensorManager == null) mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); if (mShakeAction == Action.Nothing) { if (mSensorManager != null) mSensorManager.unregisterListener(this); } if(enable_defer_stop) mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI); mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),SensorManager.SENSOR_DELAY_NORMAL); }
次に、近接センサーの状態を追跡する必要があります。 前回と同様に、 パブリックvoid onSensorChanged(SensorEvent se)メソッドを使用します。このメソッドのロール(名前で判断)は、登録済みセンサーの状態が変化したときに呼び出されます。 前回の記事では、どのセンサーが変更を生成したかを既に決定しましたが、ここでトラッキングコードも提供します。
@Override public void onSensorChanged(SensorEvent se) { if (se.sensor.getType() == Sensor.TYPE_PROXIMITY) { if( se.values[0] == 0) isproximity = true; else isproximity = false; } ....
Isproximity変数-PlayBackServiceクラスのメンバーは、センサーから受信した最後の状態(trueまたはfalse)を保存します。 これを以前の状態と比較する必要があります-これを行うには、別のブール変数prev_isproximityを追加し、デフォルトでprev_isproximity = falseを設定し、この変数の設定をOnSensorChanged関数に追加します
@Override public void onSensorChanged(SensorEvent se) { if (se.sensor.getType() == Sensor.TYPE_PROXIMITY) { if( se.values[0] == 0) isproximity = true; else isproximity = false; prev_isproximity = isproximity; ....
関数のメインコード-近似値を変更する条件によってトラックを切り替える。 次の式が真(isproximity!= Prev_isproximity)および(isproximity == true)である場合、切り替えが発生するはずです。 切り替えが近接センサーの上の特定のオブジェクト遅延(たとえば1秒)で機能するようにするには、現在の時刻とセンサーからの情報が変更された前回の時刻の差の定義を追加する必要もあります。 これを行うには、クラス自体で長いmLastProximityChangeTime変数を宣言します 。これは、センサーからの情報の最後の変更の時刻を格納します。 センサーからの情報の変化の現在の時間とセンサーの時間の差に基づいて、アクションを実行するために使用するそれらの差を決定します。
@Override public void onSensorChanged(SensorEvent se) { if (se.sensor.getType() == Sensor.TYPE_PROXIMITY) { if( se.values[0] == 0) isproximity = true; else isproximity = false; // if(enable_proximity_track_next) // boolean { if(isproximity!= prev_isproximity) { long now = SystemClock.elapsedRealtime(); // if (now - mLastProximityChangeTime > 1000 ) // 1 { if(isproximity) // { performAction(Action.NextSong, null); // } } } } prev_isproximity = isproximity; mLastProximityChangeTime = SystemClock.elapsedRealtime();; } else ...
その結果、かなりの時間を費やしながら、スマートフォンの上部(近接センサーの位置)に手をかざすだけでトラックを切り替えることができるオーディオプレーヤーを手に入れました。 これもまた、オープンソースの原則であり、最高の側面から示されています! 変更したプロジェクトのソースコードは、 githubリポジトリにダウンロードできます。