簡體   English   中英

Android 10 無法注冊 Sensor.TYPE_STEP_COUNTER

[英]Android 10 cannot register Sensor.TYPE_STEP_COUNTER

我目前正在開發一個應用程序來跟蹤步驟。

為了跟蹤步驟,我使用手機的以下傳感器: Sensor.TYPE_STEP_COUNTER

這適用於我測試過的所有設備。 最近我有機會在三星 S10 設備上測試該應用程序,但它不再跟蹤步驟,而它可以在三星 S9 的 Android 9 上運行。 它也適用於運行 Android 6 的 Google Nexus。

現在出現的問題是這是否與我的代碼有關,還是 Android 10 的問題?

我在運行應用程序時發現以下警告:

  • 2020-01-06 17:13:30.381 24261-24261/? D/SensorManager: registerListener fail (1) :: 17, SAMSUNG Step Counter Sensor, 200000, 0,

一些額外的調試信息:

  • Sensor name="SAMSUNG Step Detector Sensor", vendor="Samsung Inc.", version=1, type=18, maxRange=1.0, resolution=1.0, power=0.3, minDelay=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);
    }

希望這可以幫助與我面臨同樣問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM