运动类小程序源码网站-安卓计步器-手机自带系统级健康运动App授权

#1.Android手机自带系统级运动和健康应用

于是我整理了一份清单如下:

⚠️数据同步需要对应的官方手机授权,看上面的列表,我已经找到了三星/华为/魅族(因为计步器是华米出品)对接授权平台,链接里有你需要连接的一切!

比如华为的例子:(这里偷懒截图)

⚠️注意:以上对接需要申请账号、创建应用、获取秘钥等数据进行授权!

对于第三方应用同步数据,例如:陌陌-陌陌运动可以获取手机开机后的步数。 这里我尝试了华为手机和oppo手机,发现“微信运动”可以显示手机系统级别。 健康和锻炼应用程序的步数; 而我刚在vivo手机上启动陌陌运动后,步数显示为0,以后会实时记录并显示你的步数。

理解说明:(属于个人理解)

1、陌陌连接相应授权平台,打开“微信运动”后,如果手机有系统级计步器运动类小程序源码网站,则会同步手机内置计步器的步数显示。

2、手机没有系统级计步器,比如vivo手机。 开启“微信运动”后,很难获取已锻炼的步数,只会显示0; 并且正面会显示步数,可以通过Android自带的步行者传感器记录步数来实现。

(备注:具体记录步数的灵级值,以及步数的算法……莫莫高大上,不知道具体实现,就不做太多猜测)

3、另外,还值得注意的是,陌陌早已是手机上的常驻应用,因此它会在手机的后台进程中拥有后台服务,这也为窃听记录步数等行为提供了环境。

4.虽然Android内置的步数传感器(Sensor.TYPE_STEP_COUNTER)在应用程序关闭时可以继续工作,但由于它是Android系统内置的,并且是用户自重启以来所走过的步数,所以这个统计下来的数据不是每晚的步数,而是总量,但是每次重启手机都会被设置为0! 所以,要实现长期窃听步骤,必须有一个常驻服务,被手机系统识别,不会杀掉你的进程。 这是在Android权限越来越受到重视的情况下我无法研究的。 这么“技术”啊! (欢迎讨论...)

5.如果我们的app要实现实时准确的隔天计步的功能运动类小程序源码网站,虽然还有办法连接陌陌运动小程序来同步陌陌运动的数据,但是如何连接请自行百度和谷歌。

如果想实现打开App精确计步的功能:虽然也可以用Android内置的传感器来实现;

下面简单介绍一下两种传感器:

#2. Android 自带传感器

1.使用计步器传感器

以下代码显示如何获取默认计步器传感器的实例:

val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)

计步器感应可提供自感应激活后上次重新启动以来用户已采取的步数。 计步器比计步器感应有更长的延迟(最多 10 秒),但更准确。

⚠️注意:为了保护运行应用程序的设备上的电池,您应该使用 JobScheduler 类,从而以特定的时间间隔从计步器传感器检索当前值。 尽管不同类型的应用需要不同的传感器读取间隔,除非您的应用需要来自传感器的实时数据,否则该间隔应尽可能长。

⚠️注意:由于是用户重启后的步数,所以这个数据并不是每晚的步数,而是总量,但是每次手机重启后,都会被设置为0!

2. 使用起搏器感应

以下代码显示如何获取默认 Pacer 传感器的实例:

val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR)

每当用户迈出一步时,起搏器感应就会引发风暴。 预计延迟时间将高于 2 秒。

⚠️注意:要使用传感器,您必须声明 ACTIVITY_RECOGNITION 权限,以便您的应用可以在运行 Android 10(API 级别 29)或更高版本的设备上使用此传感器。

需要在清单中添加:


    

在需要的地方添加应用程序权限(活动):

    private const val COARSE_REQUEST = 1001
    /**
     * Permissions required to make the app work!
     */
    private val CHECK_PERMISSIONS = arrayOf(
        Manifest.permission.ACTIVITY_RECOGNITION
    )
    // 请求权限
    private fun requestPermissions() {
        ActivityCompat.requestPermissions(
            this,
            CHECK_PERMISSIONS,
            COARSE_REQUEST
        )
    }
    // 处理权限后回调方法
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array,
        grantResults: IntArray
    ) {
        when (requestCode) {
            COARSE_LOCATION_REQUEST -> {
                if (allPermissionsGranted()) {
                    // 同意了授权
                }else{
                    // 拒绝了授权
                }
            }
        }
    }
    /**
     * Check if all permission specified in the manifest have been granted
     */
    private fun allPermissionsGranted(): Boolean {
        return CHECK_PERMISSIONS.all {
            ContextCompat.checkSelfPermission(
                baseContext, it
            ) == PackageManager.PERMISSION_GRANTED
        }
    }