📚

BluetoothLeGatt(Google公開のサンプル)でscanが動作しない件。(2021/12/07現在)

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

できた。

ソードコードは下記。
https://github.com/rg687076/BluetoothLeGatt_ex.git

Discussion