Android10人无法注册Sensor.TYPE_STEP_COUNTER
Android 10 cannot register Sensor.TYPE_STEP_COUNTER
我目前正在开发一个跟踪步数的应用程序。
为了跟踪步数,我正在使用 phone 的以下传感器:Sensor.TYPE_STEP_COUNTER
这适用于我测试过的所有设备。最近我有机会在三星 S10 设备上测试该应用程序,但它不再跟踪步骤,而它在三星 S9 的 Android 9 上运行。它也适用于 Google Nexus 运行 Android 6.
现在出现的问题是这是否与我的代码有关,或者它是否与 Android 10 有关?
我在 运行 应用程序时发现以下警告:
- 2020-01-06 17:13:30.381 24261-24261/? D/SensorManager: registerListener fail (1) :: 17, SAMSUNG 计步器传感器, 200000,
0,
一些额外的调试信息:
- 传感器名称="SAMSUNG Step Detector Sensor",供应商="Samsung Inc.",版本=1,类型=18,最大范围=1.0,分辨率=1.0,功率=0.3,最小延迟=0
调试信息有些混乱,因为我测试了计步器传感器和计步器传感器都产生了相同的结果。
我注册传感器的代码:
private SensorEventListener sensorEventListener = new SensorEventListener() {
/**
* This Method gets called on each Sensor Trigger event
*
* @param sensorEvent Event created by Sensor
*/
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
//ME COUNTING STEPS
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
//Nothing to do here
}
};
private SensorManager sensorManager;
/**
* Function that initialises all the Sensors
* Sets SensorManager
* Sets Sensor to monitor to STEP Counter
* Also Registers the Sensor
*/
private void initSensors() {
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
assert sensorManager != null;
Sensor stepSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
if (stepSensor == null) {
createToastMessage("Sensor not found.");
selectedFragment = new NoSensor_Fragment();
activeFragment = 5;
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
selectedFragment).commit();
} else {
sensorManager.registerListener(sensorEventListener, stepSensor,
SensorManager.SENSOR_DELAY_NORMAL);
hasSensor = true;
}
}
我找到了这个问题的解决方案
在我的例子中,这是一个简单的权限错误。在 Android 10,您需要请求权限才能访问步进传感器。这是我在阅读 Android 10 的更改时忽略的事情。我将以下内容添加到 Manifest.xml
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
并在 onCreate 方法中添加了以下内容:
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED){
//ask for permission
requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, PHYISCAL_ACTIVITY);
}
希望这对遇到与我相同问题的人有所帮助。
可能的解决方案
在我的例子中,这是一个简单的权限错误。在 Android 10,您需要请求权限才能访问步进传感器。这是我在阅读 Android 10 的更改时忽略的事情。我将以下内容添加到 Manifest.xml
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
并在 onCreate 方法中添加了以下内容:
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED){
//ask for permission
requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, PHYISCAL_ACTIVITY);
}
希望这对遇到与我相同问题的人有所帮助。
我目前正在开发一个跟踪步数的应用程序。
为了跟踪步数,我正在使用 phone 的以下传感器:Sensor.TYPE_STEP_COUNTER
这适用于我测试过的所有设备。最近我有机会在三星 S10 设备上测试该应用程序,但它不再跟踪步骤,而它在三星 S9 的 Android 9 上运行。它也适用于 Google Nexus 运行 Android 6.
现在出现的问题是这是否与我的代码有关,或者它是否与 Android 10 有关?
我在 运行 应用程序时发现以下警告:
- 2020-01-06 17:13:30.381 24261-24261/? D/SensorManager: registerListener fail (1) :: 17, SAMSUNG 计步器传感器, 200000, 0,
一些额外的调试信息:
- 传感器名称="SAMSUNG Step Detector Sensor",供应商="Samsung Inc.",版本=1,类型=18,最大范围=1.0,分辨率=1.0,功率=0.3,最小延迟=0
调试信息有些混乱,因为我测试了计步器传感器和计步器传感器都产生了相同的结果。
我注册传感器的代码:
private SensorEventListener sensorEventListener = new SensorEventListener() {
/**
* This Method gets called on each Sensor Trigger event
*
* @param sensorEvent Event created by Sensor
*/
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
//ME COUNTING STEPS
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
//Nothing to do here
}
};
private SensorManager sensorManager;
/**
* Function that initialises all the Sensors
* Sets SensorManager
* Sets Sensor to monitor to STEP Counter
* Also Registers the Sensor
*/
private void initSensors() {
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
assert sensorManager != null;
Sensor stepSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
if (stepSensor == null) {
createToastMessage("Sensor not found.");
selectedFragment = new NoSensor_Fragment();
activeFragment = 5;
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
selectedFragment).commit();
} else {
sensorManager.registerListener(sensorEventListener, stepSensor,
SensorManager.SENSOR_DELAY_NORMAL);
hasSensor = true;
}
}
我找到了这个问题的解决方案
在我的例子中,这是一个简单的权限错误。在 Android 10,您需要请求权限才能访问步进传感器。这是我在阅读 Android 10 的更改时忽略的事情。我将以下内容添加到 Manifest.xml
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
并在 onCreate 方法中添加了以下内容:
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED){
//ask for permission
requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, PHYISCAL_ACTIVITY);
}
希望这对遇到与我相同问题的人有所帮助。
可能的解决方案
在我的例子中,这是一个简单的权限错误。在 Android 10,您需要请求权限才能访问步进传感器。这是我在阅读 Android 10 的更改时忽略的事情。我将以下内容添加到 Manifest.xml
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
并在 onCreate 方法中添加了以下内容:
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED){
//ask for permission
requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, PHYISCAL_ACTIVITY);
}
希望这对遇到与我相同问题的人有所帮助。