📚
BluetoothLeGatt(Google公開のサンプル)でscanが動作しない件。(2021/12/07現在)
最近、AndroidでBLEを開発する必要があって、ココから、ソースコード一式を取得した。
それで、ビルドして動かしたところ、いつまでたっても、BLE一覧にデバイスが全く表示されない。
結論から言うと、権限を追加すれば解決した。
1.AndroidManifest.xmlに下記を追加。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
2.ActivityのonCreate()に下記コードを追加。
/* Bluetooth用権限が許可されていない場合はリクエスト. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_PERMISSIONS);
}
}
3.Activityにパーミッション取得結果の関数を追加。
private final static int REQUEST_PERMISSIONS = 1111;
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
/* 対象外なので、無視 */
if (requestCode != REQUEST_PERMISSIONS) return;
/* 権限リクエストの結果を取得する. */
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getApplicationContext(), "aaaaaaaaaaa", Toast.LENGTH_LONG).show();
finish();
}
}
できた。
ソードコードは下記。
Discussion