私はアンドロイドには新しく、モバイルセンサーについてもっと学ぶためにアプリを開発しています。まず、私は加速度計を使用しています。加速度計の値を使ってグラフを生成する方法は?
最初に、加速度計の値を取得するために、2つのボタン(開始点と終了点)があるレイアウトを作成しました。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.ivope.sensormanipulator.SensorManipulator">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_x="50dp"
android:layout_y="46dp"
android:text="Accelerometer Signal Analyser"
android:textColor="@color/black"
android:textSize="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.197"
android:layout_below="@+id/graph"
android:layout_alignRight="@+id/btnStop"
android:layout_alignEnd="@+id/btnStop"
android:layout_marginTop="71dp" />
<com.jjoe64.graphview.GraphView
android:layout_width="match_parent"
android:layout_height="200dip"
android:id="@+id/graph"
android:layout_gravity="center"
/>
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_x="75dp"
android:layout_y="167dp"
android:background="@color/green"
android:clickable="true"
android:text="Start"
tools:layout_editor_absoluteX="56dp"
tools:layout_editor_absoluteY="231dp"
android:layout_below="@+id/textView"
android:layout_alignLeft="@+id/textView"
android:layout_alignStart="@+id/textView"
android:layout_marginTop="75dp" />
<Button
android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="220dp"
android:layout_y="167dp"
android:background="@color/red"
android:clickable="true"
android:text="Finish"
tools:layout_editor_absoluteX="242dp"
tools:layout_editor_absoluteY="231dp"
android:layout_marginRight="47dp"
android:layout_marginEnd="47dp"
android:layout_alignBaseline="@+id/btnStart"
android:layout_alignBottom="@+id/btnStart"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
メインクラスでは、私はSensorManagerとonResume、onPauseとonSensorChanged関数を実装しました。また、onclick関数のstart(onResumeの実行)とfinish(onPauseの実行)を実装しました。 ax、ay、azの3つの値を与えると仮定します。これらの3つの値を使ってグラフを生成したい。私はアンドロイドGraphView、私のアプリが正常にビルドしようとしたが、それは実行されません。何人かが私を助けてくれますか?私は加速度計の値を正しく取得しようとしている方法ですか?どのようにこれらの値を持つグラフを生成できますか?
Javaコード:加速度計の値を使用して
package com.example.ivope.sensormanipulator;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;
public class SensorManipulator extends AppCompatActivity implements SensorEventListener {
private final SensorManager mSensorManager;
private final Sensor mAccelerometer;
double ax, ay, az, y;
public SensorManipulator() {
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor_manipulator);
GraphView graph = (GraphView) findViewById(R.id.graph);
LineGraphSeries<DataPoint> series = new LineGraphSeries<>();
for (int i = 0; i < 5; i++){
ax = ax + 0.1;
y = Math.sin(ax);
series.appendData(new DataPoint(ax, y), true, 5);
}
graph.addSeries(series);
Button btnStart = (Button) findViewById(R.id.btnStart);
Button btnStop = (Button) findViewById(R.id.btnStop);
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
onResume();
}
}
);
btnStop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
onPause();
}
}
);
}
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
ax = event.values[0];
ay = event.values[1];
az = event.values[2];
}
}
}
ログを使用して、アプリがクラッシュする場所を特定します。 https://developer.android.com/reference/android/util/Log.html –