|
| BLEスキャン |
|
BLEに関する記事は古いとコンパイルでエラーが出たりで参考になるサイトに
たどり着くのが大変です。BLEに限らず同じソースを使いまわしているような
サンプルプログラムが多いような気がします。 BLEの1丁目1番地はBLE危機を検出することです。こんなアプリです。 ![]() M5Stqckを検出しています。 Android12からBLEに関する機能が変わりました。まずマニフェストの記述が 変わります。 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.BLE03"
tools:targetApi="29">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
</application>
</manifest>
Android12とそれより古いバージョンと互換性を保つため android:maxSdkVersion="30" と記述します。また、 BLUETOOTH_CONNECT と BLUETOOTH_SCAN は追加されたパーミッションです。 パーミッションのチェックは次のようになります。
private void checkPermissions() {
ArrayList<String> requestPermissions = new ArrayList<>();
//Bluetooth
if(Build.VERSION.SDK_INT > 30) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions.add(Manifest.permission.BLUETOOTH_CONNECT);
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions.add(Manifest.permission.BLUETOOTH_SCAN);
}
}
if (!requestPermissions.isEmpty()) {
ActivityCompat.requestPermissions(this, requestPermissions.toArray(new String[0]), REQUEST_MULTI_PERMISSIONS);
}
}
if(Build.VERSION.SDK_INT > 30) でAndroid12以上かをチェックしています。 余計な処理はありません。 プロジェクトBLE03.zipのダウンロード |