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

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

ただいまの
回答率

91.03%

  • Android Studio

    3162questions

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

  • Android Wear

    39questions

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

android wear スマートウォッチのアプリが落ちてしまう件

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 158

mkt84

score 2

こんにちは。プログラミング初心者です。
今回、私はAndroid Studioにおいて、スマートウォッチの加速度センサーとジャイロセンサーからそれぞれのデータを取得するアプリケーションを開発しました。
そこで、アプリ自体は完成し、データもしっかりと取得することができるのですが、スマートウォッチを傾けたり、画面が少し暗くなってしまうとアプリが終了してしまい、データの取得も止まってしまいます。
これでは継続的にデータを取得することができません。一体どのようにすれば、アプリが終了しないようにできますでしょうか。スマートウォッチ自体の設定をあれこれ変えてみても出来ませんでした、、、
ちなみに以下が今回のコードです。今回用いているウォッチはPOLAR M600(android 7.1.1)です。

package com.example.sensor_test;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.wearable.MessageApi;
import com.google.android.gms.wearable.NodeApi;
import com.google.android.gms.wearable.Wearable;

import static android.content.ContentValues.TAG;

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();
                }
        if(count>=19) {
            count = 0;
                //転送セット
                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]
                    );
        }else count++;


    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) { // 1.5
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • aja

    2018/01/18 13:57

    wearではありますがActivityなのでそのライフサイクルからforegroundからbackgroundに移行することを考えてみればいいのではないでしょうか

    キャンセル

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

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

  • ただいまの回答率 91.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    [Android] SearchViewの検索候補について

    現在ListViewにSearchViewを加えてリアルタイムの検索機能を実装しています。 SearchViewの実装には成功したのですが、検索候補に少し不満があります。

  • 解決済

    Junit SuiteClassesアノテーションの引数を動的に指定したい

    Javaの初心者です。 Junitの@SuiteClassesアノテーションの引数にテストスイートクラスを指定するとありますが、 ここを動的引き渡したいです。 できることなら、プロ

  • 解決済

    インスタンスの持つ文字列を参照して、インスタンスそのものを並び替えたい。

    こんにちは、 趣味でAndroidのプログラミングをしているものです。 一つ皆様のお力を借りたいことがあり、ここに投稿させていただきました。 よろしくお願いいたします。 現

  • 解決済

    Androidでセンサーを中断して表示させる方法

    androidstudioでボタンを押したら傾きセンサーが止まってその時の傾きを表示させるような 機能を作りたいと思っています。傾きの取得はできており、あとはボタンの動作を変えるだ

  • 解決済

    Mac android 間のデータ通信

    私はandroidstudioでアプリ開発を行なっています。 実現させたいこと ジャイロセンサーで数値を獲得して、その数値をリアルタイムでmacに表示させたい 問題点 ジャ

  • 解決済

    android opencvで輪郭描画

    私はandroidstudioでアプリ開発を行っています。 実現したいこと opencvで赤い色を検知して赤色を白に、それ以外を黒にしてそのあとに赤い物の輪郭の中心座標を返した

  • 解決済

    androidstudioでカメラ画像を取得できない

    前提・実現したいこと androidでカメラからの画像を取得してtess-twoで文字認識したいと思っています。 発生している問題・エラーメッセージ tess-twoの導入はう

  • 解決済

    アニメーションを連続で表示したい

    現在作成中のアプリにアニメーションを実装しようとしています アクティビティにはボタンと画像が一つづつ配置されています ボタンを押すと画像がAからBの位置に移動するアニメーションを実

同じタグがついた質問を見る

  • Android Studio

    3162questions

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

  • Android Wear

    39questions

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