序文
最近問題のパラドックスに遭遇し、Huawei glory V20でのAPPの開発により、Bluetoothデバイスのテストをスキャンすることが不可能であることがわかりました。携帯電話システムBluetoothをスキャンできます。デバッグが中断され、スキャンコールバックが実行されなかったことがわかりました...繰り返し試行が失敗しました。
最初はこのモデルに固有の問題だと思っていましたが、たまたまそれを目にしましたAndroid10
。Androidの細分化と厳格な権限管理を考慮すると、これは現在テスト可能な唯一の携帯電話でもあります。私はプライバシーの変更を開き、ついに無料になりました。 Android 10
理由
Bluetoothの機能は次のとおりです。一般的なスキャンが必要であることがわかります...
解決
ターゲットバージョンを変更する
解决不了问题,就解决提出问题的人。
これはバージョンアップグレードによってもたらされる権限の細分化であるため、直接変更build.gradle
しtargetSdkVersion
て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();
}
}
組み合わせたパンチのセットがダウンし、問題が解決されます。