
清单文件添加权限:
<uses-feature androID:name="androID.harDWare.sensor.stepcounter"/> <uses-feature androID:name="feature:androID.harDWare.sensor.stepdetector"/> <!--安卓10.0版本以上必须申请的健身运动权限--> <uses-permission androID:name="androID.permission.ACTIVITY_RECOGNITION" />
Activity:
package cn.areful.sensor;import androID.Manifest;import androID.app.Activity;import androID.content.Context;import androID.content.Intent;import androID.content.pm.PackageManager;import androID.harDWare.Sensor;import androID.harDWare.SensorEvent;import androID.harDWare.SensorEventListener;import androID.harDWare.SensorManager;import androID.net.Uri;import androID.os.Build;import androID.os.Bundle;import androID.provIDer.Settings;import androID.Widget.TextVIEw;import androID.Widget.Toast;import androIDx.annotation.NonNull;import androIDx.appcompat.app.AlertDialog;import androIDx.core.app.ActivityCompat;import androIDx.core.content.ContextCompat;import java.util.Locale;import cn.areful.myapplication.R;/** * Created by areful on 2020/09/27. */public class StepDetectActivity extends Activity { //动态申请健康运动权限 private static final String[] ACTIVITY_RECOGNITION_PERMISSION = {Manifest.permission.ACTIVITY_RECOGNITION}; private TextVIEw mStepText; private SensorManager mSensorManager; private MySensorEventListener mListener; private int mStepDetector = 0; // 自应用运行以来STEP_DETECTOR检测到的步数 private int mStepCounter = 0; // 自系统开机以来STEP_COUNTER检测到的步数 public static Intent buildIntent(Context context) { Intent intent = new Intent(context, StepDetectActivity.class); if (!(context instanceof Activity)) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } return intent; } @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_step_detect); mStepText = (TextVIEw) findVIEwByID(R.ID.stepText); mSensorManager = (SensorManager) getSy@R_403_6563@Service(Context.SENSOR_SERVICE); mListener = new MySensorEventListener(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // 检查该权限是否已经获取 int get = ContextCompat.checkSelfPermission(this, ACTIVITY_RECOGNITION_PERMISSION[0]); // 权限是否已经 授权 GRANTED---授权 DINIED---拒绝 if (get != PackageManager.PERMISSION_GRANTED) { // 如果没有授予该权限,就去提示用户请求自动开启权限 ActivityCompat.requestPermissions(this, ACTIVITY_RECOGNITION_PERMISSION, 321); } } } @OverrIDe protected voID onResume() { super.onResume(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { mSensorManager.registerListener(mListener, mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR), SensorManager.SENSOR_DELAY_norMAL); mSensorManager.registerListener(mListener, mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER), SensorManager.SENSOR_DELAY_norMAL); } } @OverrIDe protected voID onPause() { super.onPause(); mSensorManager.unregisterListener(mListener); } @OverrIDe public voID onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 321) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { //提示用户手动开启权限 new AlertDialog.Builder(this) .setTitle("健康运动权限") .setMessage("健康运动权限不可用") .setPositivebutton("立即开启", (dialog12, which) -> { // 跳转到应用设置界面 Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPliCATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackagename(), null); intent.setData(uri); startActivityForResult(intent, 123); }) .setNegativebutton("取消", (dialog1, which) -> { Toast.makeText(getApplicationContext(), "没有获得权限,应用无法运行!", Toast.LENGTH_SHORT).show(); finish(); }).setCancelable(false).show(); } } } } private class MySensorEventListener implements SensorEventListener { @OverrIDe public voID onSensorChanged(SensorEvent event) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Sy@R_403_6563@.out.println("@@@:" + event.sensor.getType() + "--" + Sensor.TYPE_STEP_DETECTOR + "--" + Sensor.TYPE_STEP_COUNTER); if (event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR) { if (event.values[0] == 1.0f) { mStepDetector++; } } else if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) { mStepCounter = (int) event.values[0]; } String desc = String.format(Locale.CHInesE, "设备检测到您当前走了%d步,自开机以来总数为%d步", mStepDetector, mStepCounter); mStepText.setText(desc); } } @OverrIDe public voID onAccuracyChanged(Sensor sensor, int accuracy) { } }}参考:
https://blog.csdn.net/weixin_43763952/article/details/106590253
总结以上是内存溢出为你收集整理的安卓获取步数全部内容,希望文章能够帮你解决安卓获取步数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)