안드로이드 앱에서 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을 모두 지원해야 합니다. 따라서 이 세 가지 조건을 모두 검사하는 방식으로 구현되었습니다.
'개발 이야기 > Android (안드로이드)' 카테고리의 다른 글
Android | Java | 특정 소수점까지 잘라서 계산 후 반올림 하기 (0) | 2024.01.31 |
---|---|
Android | 앱 화면 구성 중에 DB에서 Data 읽어올때 코딩 가이드 (0) | 2023.12.28 |
Android | 스마트폰 설치한 앱의 APK 추출방법 (0) | 2023.12.13 |
JAVA | Stream 에 대해 궁금점 정리 (0) | 2023.09.10 |
JAVA ByteBuffer 궁금점 정리 (0) | 2023.09.04 |
[Android] Leak Canary를 이용하여 메모리 누수개선방안 (0) | 2023.08.23 |
Android | Camera 로 부터 들어온 영상편집 (0) | 2023.07.10 |
Android RESTful 개발 Kotlin 코드 (0) | 2023.06.26 |