質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Android Wear

Android Wearとは、Googleが発表した腕時計型ウェアラブルデバイス(スマートウォッチ)向けのプラットフォームです。GoogleのAndroid OSをベースにしており、情報の入手・管理などを行うことができます。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

524閲覧

センサーからの取得情報制限について

mkt84

総合スコア6

Android Wear

Android Wearとは、Googleが発表した腕時計型ウェアラブルデバイス(スマートウォッチ)向けのプラットフォームです。GoogleのAndroid OSをベースにしており、情報の入手・管理などを行うことができます。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2018/01/15 05:53

以下のプログラムでは各センサからの取得情報が多すぎて、データの送受信にかなりの時間を要します。
どのようにすれば、0.1秒ごとに取得できるか、また、何個かのデータのうちの一つだけを取得するようにできるか、どなたかご教授お願いします。

package com.example.sensor_test;

import 略

public class MainActivity extends Activity implements SensorEventListener, Runnable{

private boolean mRegisteredSensor; private SensorManager mSensorManager; private GoogleApiClient mGoogleApiClient; private String mNode; int count =0; // 加速度センサーの値 private float[] accelerometerValues = new float[3]; private float[] magneticValues = new float[3]; private Date date; private String time = getDateString(); public static TextView text; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView)findViewById(R.id.text); mRegisteredSensor = false; mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); ArrayList<List<Sensor>> sensors = new ArrayList<List<Sensor>>(); sensors.add( mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER)); sensors.add( mSensorManager.getSensorList(Sensor.TYPE_GYROSCOPE)); for(List<Sensor> sensor : sensors){ if(sensor.size()>0){ mRegisteredSensor = mSensorManager.registerListener(this, sensor.get(0), SensorManager.SENSOR_DELAY_FASTEST); } } mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { Log.d(TAG, "onConnected");

// NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
@Override
public void onResult(NodeApi.GetConnectedNodesResult nodes) {
//Nodeは1個に限定
if (nodes.getNodes().size() > 0) {
mNode = nodes.getNodes().get(0).getId();
}
}
});
}

@Override public void onConnectionSuspended(int i) { Log.d(TAG, "onConnectionSuspended"); } }) .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d(TAG, "onConnectionFailed : " + connectionResult.toString()); } }) .build(); } @Override protected void onResume() { super.onResume(); // 1.5 { ArrayList<List<Sensor>> sensors = new ArrayList<List<Sensor>>(); sensors.add( mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER)); sensors.add( mSensorManager.getSensorList(Sensor.TYPE_GYROSCOPE)); mGoogleApiClient.connect(); for(List<Sensor> sensor : sensors){ if(sensor.size()>0){ mRegisteredSensor = mSensorManager.registerListener(this, sensor.get(0), SensorManager.SENSOR_DELAY_NORMAL); } } } } @Override protected void onPause() { if (mRegisteredSensor) { mSensorManager.unregisterListener(this); mRegisteredSensor = false; } super.onPause(); mGoogleApiClient.disconnect(); } @Override public void onSensorChanged(SensorEvent event) { // 1.5 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { accelerometerValues = event.values.clone(); } else if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { magneticValues = event.values.clone(); }

//転送セット
String SEND_DATA = accelerometerValues[0] + "," + accelerometerValues[1] + "," + accelerometerValues[2] + "," + magneticValues[0] + "," + magneticValues[1] + "," + magneticValues[2];
if (mNode != null) {
Wearable.MessageApi.sendMessage(mGoogleApiClient, mNode, SEND_DATA, null).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
@Override
public void onResult(MessageApi.SendMessageResult result) {
if (!result.getStatus().isSuccess()) {
Log.d(TAG, "ERROR : failed to send Message" + result.getStatus());
}
}
});
}

//writeCSVFile(accelerometerValues[0], accelerometerValues[1], accelerometerValues[2], magneticValues[0], magneticValues[1], magneticValues[2]); text.setText( "x " + accelerometerValues[0] + ", \n" + "y " + accelerometerValues[1] + ", \n" + "z " + accelerometerValues[2] + ", \n" + "gx " + magneticValues[0] + ", \n" + "gy " + magneticValues[1] + ", \n" + "gz " + magneticValues[2] ); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // 1.5 } @Override public void run() { // TODO Auto-generated method stub } /* 内部ストレージへのファイル書き込み用関数 */ public void writeCSVFile(float x,float y,float z,float gx,float gy,float gz){ String fileName = "test_" + time + ".csv"; String str = String.format("X = %f, Y = %f, Z = %f,GX = %f, GY = %f, GZ = %f ", accelerometerValues[0] , accelerometerValues[1] , accelerometerValues[2], magneticValues[0],magneticValues[1] , magneticValues[2]); String path = Environment.getExternalStorageDirectory().getPath(); String file_path = path + "/" + fileName; System.out.println("path = " + file_path); File file = new File(file_path); file.getParentFile().mkdir(); FileOutputStream fos; try{ fos = new FileOutputStream(file, true); OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8"); BufferedWriter bw = new BufferedWriter(osw); bw.write(str); bw.flush(); bw.close(); }catch (Exception e){ e.printStackTrace(); } } /* ただの日付取得関数 */ public static String getDateString(){ final DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); final Date date = new Date(System.currentTimeMillis()); return df.format(date); }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問