2017-02-18 8 views
-1

У меня галактика S7 от Samsung, и я хочу, чтобы на сенсорном датчике сердца (сзади телефона рядом с камерой) приложение считывало частоту сердечных сокращений и отображало его в TextView.Java Android - Создайте простой монитор частоты сердечных сокращений

Я пробовал, но он не работает.

Моя активность

import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.hardware.SensorEventListener; 
import android.util.Log; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity implements SensorEventListener{ 
    public TextView testoLabel; 
    private static final String TAG = "MyActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.e(TAG, "onCreate called"); 

     testoLabel = (TextView) findViewById(R.id.testoLabel); 

     SensorManager sMgr; 
     sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE); 

     Sensor battito = null; 
     battito = sMgr.getDefaultSensor(Sensor.TYPE_HEART_RATE); 
     if(battito != null) 
      testoLabel.setText("load sensor"); 
     else 
      testoLabel.setText("no load sensor"); 

     sMgr.registerListener(this, battito,SensorManager.SENSOR_DELAY_NORMAL); 

    } 
    @Override 
    public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) { 
      String msg = " Value sensor: " + (int)event.values[0]; 
      testoLabel.setText(msg); 
     } 
    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     System.out.println("onAccuracyChanged - accuracy: " + accuracy); 
    } 
} 

AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.giuseppeaccardo.prova" > 
    <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="@style/AppTheme" > 
     <activity android:name=".MainActivity" > 
      <uses-permission android:name="android.permission.BODY_SENSORS" /> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 
+0

Здесь не хватает информации. Вам нужно хотя бы отладить его и отправить трассировку logcat –

+0

ok ... однако код запускается, но датчик сердца телефона не обнаруживает прикосновения –

ответ

-1

Вы не можете, так как Samsung оленья кожа позволяют это, если вы не используете SDK. Если вы хотите использовать SDK, вам необходимо запросить разрешение. Дополнительная информация: http://developer.samsung.com/galaxy#sensor-extension.

Для доступа к этим датчикам вам понадобится SDK Samsung Health SDK.

Не уверен, что вы можете получить к нему доступ, но это официальная документация для использования надлежащего датчика. http://developer.samsung.com/health/data/guide

0

Вы могли бы попробовать это изменить:

sMgr.registerListener(this, battito,SensorManager.SENSOR_DELAY_NORMAL); 

к этому:

sMgr.registerListener(this, battito,SensorManager.SENSOR_DELAY_FASTEST); 

Это увеличивает время он читает ваш палец.

Последнее, что вам нужно сделать, чтобы убедиться, что вы правильно разрешили это разрешение. Я вижу, что вы разрешили это в манифесте, но вы также должны разрешить его во время выполнения. См. Это link для получения справки.

В противном случае, как предложено выше, пожалуйста, добавить еще некоторые детали о проблеме

0

Я думаю, что проблема в вашем случае с разрешения для датчиков тела. Я бы порекомендовал вам проверить, предоставлено ли разрешение датчиков тела пользователю, а затем инициализировать датчик сердечного ритма, если да, продолжайте еще просить пользователя предоставить разрешение. Это применимо, даже если вы добавили использование разрешения датчиков тела в ваш манифест.

if (checkSelfPermission(Manifest.permission.BODY_SENSORS) 
      != PackageManager.PERMISSION_GRANTED) { 
     requestPermissions(new String[]{Manifest.permission.BODY_SENSORS}, 
       PERMISSIONS_REQUEST_BODY_SENSORS); 
} else { 
     //Your code for declaring and initializing Sensor manager and Heartrate sensor 
}; 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, 
             int[] grantResults) { 
    if (requestCode == PERMISSIONS_REQUEST_BODY_SENSORS 
      && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     //Your code for declaring and initializing Sensor manager and Heartrate sensor 
    } 
} 
Смежные вопросы