Android pit [8] -Android10 Bluetooth escaneo falló

Prefacio

Recientemente encontrado una paradoja del problema, el desarrollo de la aplicación en la gloria de Huawei V20 encontró imposible escanear las pruebas de dispositivos Bluetooth. El sistema de teléfono móvil Bluetooth se puede escanear. Interrumpió la depuración y descubrió que su devolución de llamada de escaneo no se ejecutó ... Los intentos repetidos fallaron.
Al principio pensé que era un problema específico de este modelo, y luego lo vi accidentalmente Android10. Este es también el único teléfono móvil actualmente disponible para pruebas, considerando el Android cada vez más subdividido y el estricto control de permisos. Abrí el cambio de privacidad y finalmente me liberé. Android 10

Inserte la descripción de la imagen aquí

la razón

Inserte la descripción de la imagen aquí
Las funciones de Bluetooth son las siguientes, puede encontrar que se requieren escaneos comunes ...
Inserte la descripción de la imagen aquí

Solución

Modificar la versión de destino

解决不了问题,就解决提出问题的人。

Dado que es la subdivisión de permisos provocada por la actualización de la versión, entonces la modificamos directamente build.gradley la cambiamos targetSdkVersiona 27, y el problema está resuelto.

android {
    
    
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
    
    
        applicationId "com.example.felicitysolar_debug"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 2
        versionName "3.6"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
    
    
        release {
    
    
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    lintOptions {
    
    
        checkReleaseBuilds false
        abortOnError false
    }

}

Por supuesto, ¡esto es obviamente una inclinación hacia adelante!

Solicite un permiso de posicionamiento preciso

Aquí viene el enfoque ortodoxo:

Primero, debe AndroidManifest.xmlagregar los siguientes permisos:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Además, debe solicitar permisos dinámicamente. Aquí hay una muestra de Huawei:

        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
    
    
            Log.i(TAG, "sdk < 28 Q");
            if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    || ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    
    
                String[] strings =
                        {
    
    Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
                ActivityCompat.requestPermissions(this, strings, 1);
            }
        } else {
    
    
            if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    || ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    || ActivityCompat.checkSelfPermission(this,
                    "android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {
    
    
                String[] strings = {
    
    android.Manifest.permission.ACCESS_FINE_LOCATION,
                        android.Manifest.permission.ACCESS_COARSE_LOCATION,
                        "android.permission.ACCESS_BACKGROUND_LOCATION"};
                ActivityCompat.requestPermissions(this, strings, 2);
            }
        }

Dado que no hay forma de forzar la activación del posicionamiento GPS, aquí hay un recordatorio suave:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
    
    
            LocationManager alm = (LocationManager)BLEActivity.this.getSystemService(Context.LOCATION_SERVICE);
            if (!alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)){
    
    
                Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show();
            }
        }

Un conjunto de golpes combinados cae y el problema se resuelve.

Supongo que te gusta

Origin blog.csdn.net/weixin_40774605/article/details/104860565
Recomendado
Clasificación