Androidアプリ開発

Android12対応(Bluetooth権限)

この記事は約12分で読めます。
スポンサーリンク

※当サイトではアフィリエイト広告を利用しています

こんにちは、まっさん(@Tera_Msaki)です。

この記事は Androidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、記事の最後で紹介します)

この記事のテーマ


Android12のアプリ開発でBluetoothを使用する

Android 11(API レベル 30)以前で開発したアプリは、
SdkVersion を Android 12 にするだけでは、
Bluetoothが使用できません
その理由は、Android 12 で新しい Bluetooth 権限が導入されているからです。

Bluetoothを使用するアプリのAndroid12対応

◎ポイント
Android 11 以前は、マニフェストファイル( AndroidManifest.xml)に権限を、
指定するだけで、Bluetooth デバイスを使用できました。
Android 12 では、
Bluetoothデバイスを探すデバイスを他のデバイスから検出可能にする
ペア設定されているBluetoothデバイスと通信する
場合は、
アプリ側でユーザー承認をリクエストする必要があります。

◎マニフェストファイルに権限を指定する
マニフェストファイル( AndroidManifest.xml )に権限( uses-permission )を指定します。
Bluetooth デバイスを探す、ペア設定されている Bluetooth デバイスと通信する権限を追加します。

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="...">

    <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" tools:targetApi="s" />
  :

BLUETOOTHBLUETOOTH_ADMIN は、
maxSdkVersion属性を指定して、
Android 11( API レベル 30 )以前の場合に使用するようにします。
Bluetooth デバイスを使用して物理的な位置情報を取得しない場合は、
BLUETOOTH_SCANusesPermissionFlags
属性
neverForLocation を指定します。

◎権限をチェックする
Android 11( API レベル 30 )より新しいバージョンの場合、
BLUETOOTH_SCANBLUETOOTH_CONNECT
許可(
PERMISSION_GRANTED)でない場合は、
ユーザー承認をリクエストします。

    private static final int REQUEST_MULTI_PERMISSIONS = 101;
    :
    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);
        } else {
            :

        }
    }

◎ユーザ承認のリクエスト画面

加速度&傾き計測アプリ Sensor は、GPSロガーにBluetooth接続します。

◎ユーザー承認結果を確認する
ユーザー承認の結果を確認し、
許可( PERMISSION_GRANTED )でない場合は、
処理を継続できないよう制御します。

   private boolean start = true;
   :   
   @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_MULTI_PERMISSIONS) {
            if (grantResults.length > 0) {
                for (int i = 0; i < permissions.length; i++) {
                    switch (permissions[i]) {
                        case Manifest.permission.BLUETOOTH_CONNECT:
                        case Manifest.permission.BLUETOOTH_SCAN:
                            if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                                start = false;
                                :
                            }
                            break;
                        :

                        default:
                    }
                }
            }
        }
        if (start) {
            :

        } else {
            button.setVisibility(View.VISIBLE);
        }
    }

ボタンを非表示にすることで、
処理を継続できないようにしています。

今回は、ここまでです。

参考 :Bluetooth permissions

Android 12 のBluetooth権限に対応した Androidアプリです↓↓↓

Android 13 対応(画像・動画・音声ファイルのメディア権限)はこちらです↓↓↓

SwitchBot 温湿度計は、
湿度と温度をBluetooth経由で取得できます♪
広告パケットに湿度と温度が含まれているため、
ペアリングなしで取得できます。
これ、内緒だよ(^^♪)

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちら
から、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

初めての Android のアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。

未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪

無料でJava言語を学べるのは、かなり魅力的♪
でも、応募資格は35歳以下です、、、
2022年12月から説明会が土曜日開催が追加されていますよ♪
説明会では、希望者に対してプログラミング体験もできるよ♪

未経験者からプログラマーを目指すのに最適かと、
まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています、
お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、
まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

コメント欄