본문 바로가기

개발 이야기

Android | BLE / BEACON 지원여부 체크

320x100

안드로이드 앱에서 BLE 지원여부를 확인하여 해당 기능 활성/비활성 시 사용할 코드를 작성.

참고용으로 실제 동작여부 확인 후 사용바랍니다.

 

 

1. BLE 지원여부 확인하기

 

For Java

 

import android.content.Context
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val isBleSupported = checkBleSupport(this)

        if (isBleSupported) {
            // BLE is supported on the device
            Toast.makeText(this, "BLE is supported", Toast.LENGTH_SHORT).show()
        } else {
            // BLE is not supported on the device
            Toast.makeText(this, "BLE is not supported", Toast.LENGTH_SHORT).show()
        }
    }

    private fun checkBleSupport(context: Context): Boolean {
        return context.packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)
    }
}

위 코드에서 checkBleSupport() 함수는 안드로이드 단말의 BLE 지원 여부를 확인하여 그 결과를 반환합니다.

 

이 함수가 true를 반환하면 단말기는 BLE을 지원하고 있으며, false를 반환하면 지원하지 않습니다. 이 함수의 인자로 Context 객체가 필요한데, 이는 안드로이드 시스템 서비스에 접근하기 위해 필요합니다.

 

따라서 이 함수는 Activity 또는 Service와 같은 Context 객체를 가진 곳에서 호출해야 합니다. 위 예제에서는 MainActivity의 onCreate() 메서드 내에서 이 함수를 호출하여 BLE 지원 여부를 확인하고 있습니다.

 

 

For Kotlin

코틀린에서 BLE 지원 여부를 확인하고 그 결과를 반환하는 함수는 다음과 같이 작성할 수 있습니다:

import android.content.Context
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val isBleSupported = checkBleSupport(this)

        if (isBleSupported) {
            // BLE is supported on the device
            Toast.makeText(this, "BLE is supported", Toast.LENGTH_SHORT).show()
        } else {
            // BLE is not supported on the device
            Toast.makeText(this, "BLE is not supported", Toast.LENGTH_SHORT).show()
        }
    }

    private fun checkBleSupport(context: Context): Boolean {
        return context.packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)
    }
}

위 코드에서 checkBleSupport() 함수는 안드로이드 단말의 BLE 지원 여부를 확인하여 그 결과를 반환합니다.

 

이 함수가 true를 반환하면 단말기는 BLE을 지원하고 있으며, false를 반환하면 지원하지 않습니다. 이 함수의 인자로 Context 객체가 필요한데, 이는 안드로이드 시스템 서비스에 접근하기 위해 필요합니다.

 

따라서 이 함수는 Activity 또는 Service와 같은 Context 객체를 가진 곳에서 호출해야 합니다. 위 예제에서는 MainActivity의 onCreate() 메서드 내에서 이 함수를 호출하여 BLE 지원 여부를 확인하고 있습니다.

 

 

 

 

2. BLE 와 BEACON 지원여부 확인하기

추가적으로 Beacon 지원여부도 확인할 수 있다.

아래의 코드를 참고하자.

 

For Java

 

import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        boolean isBleSupported = checkBleSupport(this);

        if (isBleSupported) {
            // BLE is supported on the device
            Toast.makeText(this, "BLE is supported", Toast.LENGTH_SHORT).show();
        } else {
            // BLE is not supported on the device
            Toast.makeText(this, "BLE is not supported", Toast.LENGTH_SHORT).show();
        }

        boolean isBeaconSupported = checkBeaconSupport();

        if (isBeaconSupported) {
            // Beacon is supported on the device
            Toast.makeText(this, "Beacon is supported", Toast.LENGTH_SHORT).show();
        } else {
            // Beacon is not supported on the device
            Toast.makeText(this, "Beacon is not supported", Toast.LENGTH_SHORT).show();
        }
    }

    public static boolean checkBleSupport(Context context) {
        return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);
    }

    public static boolean checkBeaconSupport() {
      BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

      return bluetoothAdapter != null && bluetoothAdapter.isOffloadedFilteringSupported() 
             && bluetoothAdapter.isOffloadedScanBatchingSupported()
             && getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);
   }
}

위 코드에서 checkBleSupport() 함수는 안드로이드 단말의 BLE 지원 여부를 확인하여 그 결과를 반환합니다. 이 함수가 true를 반환하면 단말기는 BLE을 지원하고 있으며, false를 반환하면 지원하지 않습니다.

 

checkBeaconSupport() 함수는 안드로이드 단말의 Beacon 지원 여부를 확인하여 그 결과를 반환합니다. 이 함수가 true를 반환하면 단말기는 Beacon을 지원하고 있으며, false를 반환하면 지원하지 않습니다.

 

이 때 Beacon 기능은 기본적으로 BLE 기능을 필요로 하며 추가적으로 블루투스 어댑터가 Offloaded Filtering과 Offloaded Scan Batching을 모두 지원해야 합니다. 따라서 이 세 가지 조건을 모두 검사하는 방식으로 구현되었습니다.

 

 

For Kotlin

 

import android.bluetooth.BluetoothAdapter
import android.content.Context
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val isBleSupported = checkBleSupport(this)

        if (isBleSupported) {
            // BLE is supported on the device
            Toast.makeText(this, "BLE is supported", Toast.LENGTH_SHORT).show()
        } else {
            // BLE is not supported on the device
            Toast.makeText(this, "BLE is not supported", Toast.LENGTH_SHORT).show()
        }

        val isBeaconSupported = checkBeaconSupport()

        if (isBeaconSupported) {
            // Beacon is supported on the device
            Toast.makeText(this, "Beacon is supported", Toast.LENGTH_SHORT).show()
        } else {
            // Beacon is not supported on the device
            Toast.makeText(this, "Beacon is not supported", Toast.LENGTH_SHORT).show()
        }
    }

    private fun checkBleSupport(context: Context): Boolean {
        return context.packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)
    }

    private fun checkBeaconSupport(): Boolean {
      val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()

      return bluetoothAdapter != null && bluetoothAdapter.isOffloadedFilteringSupported 
             && bluetoothAdapter.isOffloadedScanBatchingSupported 
             && packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)
   }
}

위 코드에서 checkBleSupport() 함수는 안드로이드 단말의 BLE 지원 여부를 확인하여 그 결과를 반환합니다. 이 함수가 true를 반환하면 단말기는 BLE을 지원하고 있으며, false를 반환하면 지원하지 않습니다.

 

checkBeaconSupport() 함수는 안드로이드 단말의 Beacon 지원 여부를 확인하여 그 결과를 반환합니다. 이 함수가 true를 반환하면 단말기는 Beacon을 지원하고 있으며, false를 반환하면 지원하지 않습니다.

 

이 때 Beacon 기능은 기본적으로 BLE 기능을 필요로 하며 추가적으로 블루투스 어댑터가 Offloaded Filtering과 Offloaded Scan Batching을 모두 지원해야 합니다. 따라서 이 세 가지 조건을 모두 검사하는 방식으로 구현되었습니다.

반응형