Androidスマートフォンからセンサー測定値を収集します

Habrに関する最初の投稿では、Android OSでセンサーデータを取得する方法、具体的には3つすべての平面でのデバイスの傾斜角について説明したいと思います。 猫の下で興味を持ってください。


Android OSセンサーは、動き、位置、環境の3つのカテゴリに分類されます。 これらのセンサーは大きく異なる場合があります。


当然、それらのセットはデバイスの「構成」に依存しますが、ほとんどのAndroidスマートフォンに存在するセンサー(加速度計とジャイロスコープ)があります。

これらのセンサーを使用して、空間内の電話機の位置、つまり3つのすべての平面(XY、YZ、ZX)でのデバイスの傾斜角を見つけることができます。 これが私たちがやることです!

最初に、新しいプロジェクトを作成し、センサーの読み取り値とそれに対応する署名を表示するために、3つの碑文を含む簡単なディスプレイに配置します。 私はこのようなものを得ました:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView1" android:layout_width="60dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="25dp" android:text=" XY" /> <TextView android:id="@+id/xyValue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="25dp" android:text="0" /> </LinearLayout> <LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView3" android:layout_width="60dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="25dp" android:text=" XZ" /> /> <TextView android:id="@+id/xzValue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="25dp" android:text="0" /> </LinearLayout> <LinearLayout android:id="@+id/linearLayout3" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView5" android:layout_width="60dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="25dp" android:text=" ZY" /> <TextView android:id="@+id/zyValue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="25dp" android:text="0" /> </LinearLayout> </LinearLayout> 


メインアクティビティでは、次のようにクラス宣言を宣言します。

 public class Main extends Activity implements SensorEventListener { 


SensorEventListenerクラスは、センサーのイベントを追跡するのに役立ちます。

次の4つの必須メソッドが必要です。

 @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { //    } @Override protected void onResume() { } @Override protected void onPause() { } @Override public void onSensorChanged(SensorEvent event) { //   } 


おそらく既に推測されているように、後者の方法にすぐ興味を持ちます。 それまでの間、必要な変数を宣言します。

  private SensorManager mSensorManager; private Sensor mOrientation; private float xy_angle; private float xz_angle; private float zy_angle; private TextView xyView; private TextView xzView; private TextView zyView; 


最初の変数はデバイスセンサーマネージャーです。 興味のあるセンサーへのアクセスを許可するのは彼女です。 これを行うには、onCreateイベントを次のようにします。

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //    mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); //    xyView = (TextView) findViewById(R.id.xyValue); // xzView = (TextView) findViewById(R.id.xzValue); //       zyView = (TextView) findViewById(R.id.zyValue); // } 


まあ、ほぼ完了! 値を取得してテキストフィールドに表示するためだけに残ります。 onSensorChangedイベントを思い出してください。 覚えていれば、SensorEventイベントパラメータが渡されます。 傾斜角の値が度単位で含まれています。 したがって、最後の仕上げを行い、イベントをフォームに追加します。

 public void onSensorChanged(SensorEvent event) { xy_angle = event.values[0]; // XY xz_angle = event.values[1]; // XZ zy_angle = event.values[2]; // ZY xyView.setText(String.valueOf(xy_angle)); xzView.setText(String.valueOf(xz_angle)); zyView.setText(String.valueOf(zy_angle)); } 


すべて準備完了です! 仮想スマートフォンを有効にできないことは明らかだと思います。 したがって、テストには実際のデバイスが必要です。 スマートフォンを起動して、数字を追跡します。

誰かがそれを必要とするならば、私は例によって作られたapkを投稿します。

この投稿があなたにとって有益で理解しやすいものだったことを願っています!

UPD:判明したように、エミュレータでテストできます 。 リンクを提供してくれたBlackStreamに感謝します!

Source: https://habr.com/ru/post/J137678/


All Articles