前の
記事では、デバイスがポケットにある場合(たとえば)、
Vanilla Musicオープンソースプレーヤーにボリュームキーを使用してトラックを切り替える機能を追加する方法を検討しました。 この記事では、一般的に最小限の労力で、スマートフォンに触れることなく、スマートフォンのロックを解除することなく、どのようにトラックを切り替えることができるかという主なアイデアで修正を続けます。
その結果、近接センサー
(近接センサー)からの情報を使用することが決定されました。 アイデアの本質は、センサーからの近接信号が表示されたときにトラックを切り替えることです。
それでは、修正に進みましょう。 近接センサーを使用するには、アプリケーションでその「リスニング」を有効にする必要があります。 これは前の
記事で行われましたが、念のため、構成コードを示します。
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;
その結果、かなりの時間を費やしながら、スマートフォンの上部(近接センサーの位置)に手をかざすだけでトラックを切り替えることができる
オーディオプレーヤーを手に入れました。 これもまた、オープンソースの原則であり、最高の側面から示されています! 変更したプロジェクトのソースコードは、
githubリポジトリにダウンロードできます。