📚
BluetoothLeGatt(Google公開のサンプル)でscanが動作しない件。(2025/08/31現在)
なんとなんと。2025/08/31時点だと。もうBLE周りはがっさり変更しちまって。過去記事のままだと動かなくなったよ。
別記事で新しいソースを説明します。しばしお待ちを。
Abstract
Android公式のサンプルコードが動かないので、修正して動くようにした話。修正コードは下記githubにコミットしたよ。
~~github : https://github.com/rg687076/BluetoothLeGatt_ex.git~~
概要
Android公式のソースコードなのに動かないって orz
~~公式コード : https://github.com/android/connectivity-samples.git~~
最近AndroidでBLEを開発する必要があって、上記からソースコード一式を取得して動かしてみた。
なのにいつまでたっても、BLE一覧にデバイスが全く表示されない。どげんこと?

結論から言うと、権限不足。
下記対応で解決した。
-
AndroidManifest.xmlに下記を追加。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> -
ActivityのonCreate()に下記コードを追加。
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);~~
}
}
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