Androidピット[8] -Android10Bluetoothスキャンに失敗しました

序文

最近問題のパラドックスに遭遇し、Huawei glory V20でのAPPの開発により、Bluetoothデバイスのテストをスキャンすることが不可能であることがわかりました。携帯電話システムBluetoothをスキャンできます。デバッグが中断され、スキャンコールバックが実行されなかったことがわかりました...繰り返し試行が失敗しました。
最初はこのモデルに固有の問題だと思っていましたが、たまたまそれを目にしましたAndroid10。Androidの細分化と厳格な権限管理を考慮すると、これは現在テスト可能な唯一の携帯電話でもあります。私はプライバシーの変更を開き、ついに無料になりました。 Android 10

ここに写真の説明を挿入

理由

ここに写真の説明を挿入
Bluetoothの機能は次のとおりです。一般的なスキャンが必要であることがわかります...
ここに写真の説明を挿入

解決

ターゲットバージョンを変更する

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

これはバージョンアップグレードによってもたらされる権限の細分化であるため、直接変更build.gradletargetSdkVersionて27に変更し、問題を解決します。

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
    }

}

もちろん、これは明らかに前傾です!

正確な位置決め許可を申請する

これがオーソドックスなアプローチです。

まず、AndroidManifest.xml次の権限を追加する必要があります

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

さらに、権限を動的に申請する必要があります。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);
            }
        }

GPSポジショニングを強制的にオンにする方法はないので、ここにソフトリマインダーがあります。

        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();
            }
        }

組み合わせたパンチのセットがダウンし、問題が解決されます。

おすすめ

転載: blog.csdn.net/weixin_40774605/article/details/104860565