2017-06-02 58 views
1

これは非常に簡単な質問になることが多く、多くの人が同じ質問をしていますが、心拍数の問題はまだあります。もちろん、私は解決策について多くの研究を行っています。Android Wearから心拍数を取得

は一般的に、心拍センサーを使用するために、我々は許可を取得し、sensormanagerを使用する必要がありmainActivityでセンサーのregisterListenerを必要としています。

SDK23以上でhereと言われた人もいますが、別途許可を申請する必要がありますが、現時点ではAndroid Wearの一部のみを開発しており、電話に関する情報はありません。

また、アプリケーションの再インストールと再実行も試みました。これらの方法はすべて私のためには機能しません。

私のコードは、私が望むのは、時計に心拍数を表示しています。

AWHeartRateSensor \摩耗\ SRC \メイン\のJava \ comの例の\アンドロイド\ \ awheartratesensor \ MainActivity.javaここ

package com.example.android.awheartratesensor; 

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.support.wearable.view.WatchViewStub; 
import android.util.Log; 
import android.widget.TextView; 

import static com.google.android.gms.wearable.DataMap.TAG; 

public class MainActivity extends Activity { 

private SensorManager mSensorManager; 
private Sensor mHeartSensor; 
private TextView mTextView; 
WatchViewStub mStub; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
     mStub = (WatchViewStub) findViewById(R.id.watch_view_stub); 
    mStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { 
     @Override 
     public void onLayoutInflated(WatchViewStub stub) { 
      mTextView = (TextView) stub.findViewById(R.id.text); 
      mTextView.setText("I am here"); 
     } 
    }); 

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    mHeartSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); 


    mStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { 
     @Override 
     public void onLayoutInflated(WatchViewStub stub) { 
      mTextView = (TextView) stub.findViewById(R.id.text); 
      mTextView.setText("I have the sensor manager"); 
     } 
    }); 

} 
protected void onResume() { 
    super.onResume(); 
    mSensorManager.registerListener(mSensorEventListener, mHeartSensor, SensorManager.SENSOR_DELAY_NORMAL); 
} 

protected void onPause() { 
    super.onPause(); 
    mSensorManager.unregisterListener(mSensorEventListener); 
} 
private SensorEventListener mSensorEventListener = new SensorEventListener() { 


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

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     final SensorEvent event1=event; 

     mStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { 

      @Override 
      public void onLayoutInflated(WatchViewStub stub) { 
       mTextView = (TextView) stub.findViewById(R.id.text); 
       mTextView.setText(Float.toString(event1.values[0])); 
      } 
     }); 
    } 


    }; 
} 

manifest.xmlにある

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.awheartratesensor"> 

    <uses-feature android:name="android.hardware.type.watch" /> 
    <uses-permission android:name="android.permission.BODY_SENSORS" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@android:style/Theme.DeviceDefault"> 
     <uses-sdk android:minSdkVersion="23" 
      android:targetSdkVersion="23" 
      /> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

[1](https://github.com/alejandrocq/HeartRateTest)のようなコードを試してください。これはあなたのコードが欠けているものを見るのに役立ちます。また、時計に合わせてSDKの最小バージョンとターゲットSDKのバージョンを設定することを忘れないでください。最後に、あなたがリンクした関連するSO投稿によって提供されたすべての提案されたソリューションを使って新しいプロジェクトを設定してみてください。お役に立てれば。 –

+0

お返事ありがとうございます、それはかなりクールですが、それは私のためには機能しません。実際には、bpm番号なしで「お待ちください...」と表示され続けます。しかし、あなたのコードはより多くのlogiqueです。 – Xinxin

答えて

1

ありこの問題を解決するには2つの方法があります。

あなたのウェアラブルデバイスの設定のアプリ(または「アプリケーション情報」)セクションへの迅速な修正

GOのと身体センサーのための許可がアプリの有効/チェックされているかどうかを確認します。マニフェストに権限を含める場合でも、アプリケーションの権限は常にデフォルトではチェックされません。設定でアクセス許可を有効にすると、アプリは心拍センサーを適切に使用し始めます。

適切な修正マニフェストにパーミッションを追加することに加えて

は、Androidは「ボディセンサー」のランタイム許可を実装する必要があります。この実行時アクセス許可は一度だけ必要です。その後は常に意図どおりに動作します。

関連する問題