투케이2K

412. (android/java) [android 12 / target 31] 블루투스 장비 연결 상태 체크 실시 (bluetooth connected) - 타겟 31 대응 본문

Android

412. (android/java) [android 12 / target 31] 블루투스 장비 연결 상태 체크 실시 (bluetooth connected) - 타겟 31 대응

투케이2K 2022. 11. 24. 15:34

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[AndroidManifest.xml : 소스 코드]

    <!--  블루투스 및 GPS : 퍼미션 설정 선언  -->
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>





    <!--블루투스 권한 추가 sdk 31 대응-->
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/>
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
 

 


 

[java : 소스 코드]

    // TODO [사용자 모바일 디바이스 블루투스 장비 연결 상태 확인]
    public static Boolean bluetoothConnectState(Context mContext) {

        /**
         * // -----------------------------------------
         * [bluetoothConnectState 메소드 설명]
         * // -----------------------------------------
         * 1. 사용자 모바일 디바이스 블루투스 장비 연결 상태 확인
         * // -----------------------------------------
         * 2. 호출 방법 : if (C_StateCheck.bluetoothConnectState(A_Main.this) == true) { } else { }
         * // -----------------------------------------
         * 3. 리턴 결과 : 블루투스 장비가 연결된 경우 true / 아니면 false
         * // -----------------------------------------
         * 4. 필요 퍼미션 :
         *
         * <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
         * // -----------------------------------------
         * */

        // [리턴 결과 반환 변수 선언]
        boolean returnData = false;
        String deviceName = "";
        try {
            /*
             * 1. [페어링 된 블루투스 장비 목록을 얻어옵니다]
             * 2. 블루투스 기능이 활성화된 경우 BluetoothDevice 리스트 목록 표시 / 블루투스 기능이 비활성인 경우 목록 표시 안됨
             * */

            // TODO [안드로이드 12 / 타겟 31 이상 권한 체크 로직 추가 실시]
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
                if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
                    Log.i("---","---");
                    Log.e("//===========//","================================================");
                    Log.i("","\n"+"[C_StateCheck >> bluetoothConnectState() :: 블루투스 장비 연결 상태 확인 실패]");
                    Log.i("","\n"+"[error :: "+"Android 12 / target 31 이상 BLUETOOTH_CONNECT 권한 부여 안됨"+"]");
                    Log.e("//===========//","================================================");
                    Log.i("---","---");

                    return returnData;
                }
            }

            Set<BluetoothDevice> bluetoothDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
            Log.i("---","---");
            Log.d("//===========//","================================================");
            Log.i("","\n"+"[C_StateCheck >> bluetoothConnectState() :: 블루투스 장비 연결 상태 확인 실시]");
            Log.i("","\n"+"[페어링된 블루투스 장비 목록 :: "+String.valueOf(bluetoothDevices.toString())+"]");
            Log.d("//===========//","================================================");
            Log.i("---","---");

            // [페어링된 블루투스 장비 목록에서 현재 연결된 상태 체크 실시]
            for (BluetoothDevice bluetoothDevice : bluetoothDevices) {
                try {
                    // [isConnected 메소드를 사용해서 페어링된 블루투스 장비 목록에서 개별 장비가 연결되었는지 확인 실시]
                    Method m = bluetoothDevice.getClass().getMethod("isConnected", (Class[]) null);
                    boolean connected = (boolean) m.invoke(bluetoothDevice, (Object[]) null);

                    if (connected == true){ // TODO [블루투스 장비가 연결된 상태]

                        // [연결된 블루투스 디바이스 이름 확인]
                        deviceName = String.valueOf(bluetoothDevice.getName());

                        ///*
                        if (deviceName != null && deviceName.length()>0
                                && deviceName.trim().equals("") == false && deviceName.trim().equals("null") == false){
                        }
                        else {
                            deviceName = String.valueOf(bluetoothDevice.getAddress());
                        }
                        // */

                        // [리턴 결과 삽입]
                        returnData = true;

                        // [반복문 종료]
                        break;
                    }
                }
                catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
        catch (Exception e){
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_StateCheck >> bluetoothConnectState() :: 블루투스 장비 연결 상태 확인 실시]");
            Log.i("","\n"+"[Exception :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
        }

        // [로그 출력 실시]
        Log.i("---","---");
        Log.d("//===========//","================================================");
        Log.i("","\n"+"[C_StateCheck >> bluetoothConnectState() :: 블루투스 장비 연결 상태 확인 실시]");
        Log.i("","\n"+"[deviceName :: "+String.valueOf(deviceName)+"]");
        Log.i("","\n"+"[return :: "+String.valueOf(returnData)+"]");
        Log.d("//===========//","================================================");
        Log.i("---","---");

        // [리턴 결과 반환]
        return returnData;
    }
 

[결과 출력]

 

 

반응형
Comments