BLEスキャン
BLEに関する記事は古いとコンパイルでエラーが出たりで参考になるサイトに たどり着くのが大変です。BLEに限らず同じソースを使いまわしているような サンプルプログラムが多いような気がします。
BLEの1丁目1番地はBLE危機を検出することです。こんなアプリです。

M5Stqckを検出しています。 Android12からBLEに関する機能が変わりました。まずマニフェストの記述が 変わります。
AndroidManifest.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools">
  4.  
  5. <uses-permission android:name="android.permission.BLUETOOTH"
  6. android:maxSdkVersion="30" />
  7. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
  8. android:maxSdkVersion="30" />
  9. <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
  10. <uses-permission android:name="android.permission.BLUETOOTH_SCAN"
  11. android:usesPermissionFlags="neverForLocation" />
  12.  
  13. <application
  14. android:allowBackup="true"
  15. android:dataExtractionRules="@xml/data_extraction_rules"
  16. android:fullBackupContent="@xml/backup_rules"
  17. android:icon="@mipmap/ic_launcher"
  18. android:label="@string/app_name"
  19. android:roundIcon="@mipmap/ic_launcher_round"
  20. android:supportsRtl="true"
  21. android:theme="@style/Theme.BLE03"
  22. tools:targetApi="29">
  23. <activity
  24. android:name=".MainActivity"
  25. android:exported="true">
  26. <intent-filter>
  27. <action android:name="android.intent.action.MAIN" />
  28.  
  29. <category android:name="android.intent.category.LAUNCHER" />
  30. </intent-filter>
  31.  
  32. <meta-data
  33. android:name="android.app.lib_name"
  34. android:value="" />
  35. </activity>
  36. </application>
  37.  
  38. </manifest>
  39.  

Android12とそれより古いバージョンと互換性を保つため
android:maxSdkVersion="30"
と記述します。また、
BLUETOOTH_CONNECT と BLUETOOTH_SCAN は追加されたパーミッションです。 パーミッションのチェックは次のようになります。
  1. private void checkPermissions() {
  2. ArrayList<String> requestPermissions = new ArrayList<>();
  3. //Bluetooth
  4. if(Build.VERSION.SDK_INT > 30) {
  5. if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT)
  6. != PackageManager.PERMISSION_GRANTED) {
  7. requestPermissions.add(Manifest.permission.BLUETOOTH_CONNECT);
  8. }
  9. if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN)
  10. != PackageManager.PERMISSION_GRANTED) {
  11. requestPermissions.add(Manifest.permission.BLUETOOTH_SCAN);
  12. }
  13. }
  14. if (!requestPermissions.isEmpty()) {
  15. ActivityCompat.requestPermissions(this, requestPermissions.toArray(new String[0]), REQUEST_MULTI_PERMISSIONS);
  16. }
  17. }
  18.  

if(Build.VERSION.SDK_INT > 30)
でAndroid12以上かをチェックしています。
余計な処理はありません。
プロジェクトBLE03.zipのダウンロード