Android 计步器不工作,未出现在 SensorManager 中
Android Step Counter not working, not appearing in SensorManager
我正在尝试在 Android 中制作一个简单的计步器,我目前正在使用 Oreo 并使用 Pixel 2 进行模拟 API 29。问题是当我调用 sensorManager 时,它根本不起作用STEP_COUNTER 或 STEP_DETECTOR 均未列出传感器。我一步一步地按照不同的教程进行操作,但没有用。有谁知道可能是什么问题?这是我的代码和清单,以及我正在谈论的列表,
我的activityStepsActivity.java
public class StepsActivity extends AppCompatActivity implements SensorEventListener {
SensorManager sm;
Sensor sensor;
TextView tv_steps_count;
int counter=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_steps);
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED){
//ask for permission
requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION},Sensor.TYPE_STEP_COUNTER);
}
tv_steps_count = (TextView) findViewById(R.id.tv_steps_count);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
if(sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)!=null){
sensor = (Sensor) sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
}else if(sm.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR)!=null){
sensor =(Sensor) sm.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
}
findViewById(R.id.backBTN).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
tv_steps_count.setText(""+sensorEvent.values[0]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Override
public void onPause() {
stop();
super.onPause();
}
@Override
public void onResume() {
start();
super.onResume();
}
private void start() {
sm.registerListener(this, sensor, sm.SENSOR_DELAY_FASTEST);
}
private void stop() {
sm.unregisterListener(this);
}
}
我的清单(只是与此相关的部分)
...
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-feature
android:name="android.hardware.sensor.stepcounter"
android:required="true"/>
<uses-feature
android:name="android.hardware.sensor.stepdetector"
android:required="true"/>
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
...
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-feature android:name="android.hardware.sensor.stepcounter"
android:required="true"/>
<uses-feature android:name="android.hardware.sensor.stepdetector"
android:required="true"/>
...
以及描绘调试器问题的屏幕截图
问题是模拟器不支持STEP_COUNTER或STEP_DETECTOR。您需要在硬件支持这两个传感器的真实设备上测试此功能。
我正在尝试在 Android 中制作一个简单的计步器,我目前正在使用 Oreo 并使用 Pixel 2 进行模拟 API 29。问题是当我调用 sensorManager 时,它根本不起作用STEP_COUNTER 或 STEP_DETECTOR 均未列出传感器。我一步一步地按照不同的教程进行操作,但没有用。有谁知道可能是什么问题?这是我的代码和清单,以及我正在谈论的列表,
我的activityStepsActivity.java
public class StepsActivity extends AppCompatActivity implements SensorEventListener {
SensorManager sm;
Sensor sensor;
TextView tv_steps_count;
int counter=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_steps);
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED){
//ask for permission
requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION},Sensor.TYPE_STEP_COUNTER);
}
tv_steps_count = (TextView) findViewById(R.id.tv_steps_count);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
if(sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)!=null){
sensor = (Sensor) sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
}else if(sm.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR)!=null){
sensor =(Sensor) sm.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
}
findViewById(R.id.backBTN).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
tv_steps_count.setText(""+sensorEvent.values[0]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Override
public void onPause() {
stop();
super.onPause();
}
@Override
public void onResume() {
start();
super.onResume();
}
private void start() {
sm.registerListener(this, sensor, sm.SENSOR_DELAY_FASTEST);
}
private void stop() {
sm.unregisterListener(this);
}
}
我的清单(只是与此相关的部分)
...
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-feature
android:name="android.hardware.sensor.stepcounter"
android:required="true"/>
<uses-feature
android:name="android.hardware.sensor.stepdetector"
android:required="true"/>
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
...
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-feature android:name="android.hardware.sensor.stepcounter"
android:required="true"/>
<uses-feature android:name="android.hardware.sensor.stepdetector"
android:required="true"/>
...
以及描绘调试器问题的屏幕截图
问题是模拟器不支持STEP_COUNTER或STEP_DETECTOR。您需要在硬件支持这两个传感器的真实设备上测试此功能。