Notice
Recent Posts
Recent Comments
Link
투케이2K
152. (AndroidStudio/android/java) 블루투스 페어링 (paired) 된 목록 스캔 - BluetoothAdapter , BluetoothDevice 본문
Android
152. (AndroidStudio/android/java) 블루투스 페어링 (paired) 된 목록 스캔 - BluetoothAdapter , BluetoothDevice
투케이2K 2021. 5. 18. 10:20/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : AndroidStudio
개발 언어 : java
/* =========================== */
/* =========================== */
[소스 코드]
/** ========= [구현에 필요한 변수 및 퍼미션] ========= **/
//TODO [필요한 변수 선언]
BluetoothAdapter mbluetoothAdapter;
boolean bleStartFlag = false;
ArrayList bleFormatList = new ArrayList();
private Set<BluetoothDevice> pairedDevices;
/**
* TODO [퍼미션 선언]
* <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"/>
* <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
* <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
* */
/** ========= [블루투스 및 GPS 활성 상태 확인 및 브로드 캐스트 실행 부분] ========= **/
//TODO [블루투스 및 GPS 기능이 정상 활성 상태인 경우]
if(getBleGpsStateCheck() == true){
//TODO [기존에 스캔이 실행된 적이 없는 경우]
if(bleStartFlag == false){
blePairingScanStart();
}
else{
Toast.makeText(getApplication(),"블루투스 페어링 목록 스캔이 진행중입니다 ...",Toast.LENGTH_SHORT).show();
}
}
/** ========= [블루투스 페어링 목록 스캔 시작 부분] ========= **/
public void blePairingScanStart(){
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > blePairingScanStart() 메소드 : 블루투스 페어링된 목록 스캔 시작]");
Log.d("//===========//","================================================");
Log.d("---","---");
try {
//TODO [블루투스 페어링 목록 스캔 시작 플래그 설정]
bleStartFlag = true;
//TODO [기존에 저장된 값 삭제 실시]
if(bleFormatList != null){
if(bleFormatList.size() > 0){
bleFormatList.clear();
}
}
//TODO [BluetoothAdapter 관련 객체 선언]
mbluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
//TODO [현재 페어링 된 장치 세트 가져 오기]
pairedDevices = mbluetoothAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
//TODO [JSON 형식으로 포맷 실시]
JSONObject jsonObject = new JSONObject();
jsonObject.put("NAME", String.valueOf(device.getName())); //[블루투스 이름]
jsonObject.put("ADDR", String.valueOf(device.getAddress())); //[블루투스 주소]
//jsonObject.put("UUID", String.valueOf(device.getUuids())); //[블루투스 uuid]
bleFormatList.add(jsonObject.toString());
}
}
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > blePairingScanStart() 메소드 : 블루투스 페어링 목록 스캔 완료]");
Log.d("","\n"+"[개수 : "+String.valueOf(bleFormatList.size())+"]");
Log.d("","\n"+"[데이터 : "+String.valueOf(bleFormatList.toString())+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
//TODO [블루투스 페어링 목록 스캔 시작 플래그 설정]
bleStartFlag = false;
}
catch (Exception e){
e.printStackTrace();
}
}
/** ========= [블루투스 및 GPS 활성 여부 확인] ========= **/
public Boolean getBleGpsStateCheck(){
boolean state_result = false;
try {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null){ //TODO [블루투스를 지원하는 기기인지 확인]
Log.d("---","---");
Log.e("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > getBleGpsStateCheck() 메소드 : 블루투스 지원 기기 확인]");
Log.d("","\n"+"[디바이스 : 블루투스를 지원하지 않는 기기]");
Log.e("//===========//","================================================");
Log.d("---","---");
//TODO [Alert 팝업창 알림 실시]
getAlertDialog("[알림]",
"사용자 디바이스는 블루투스 기능을 지원하지 않는 단말기입니다.",
"확인", "취소", "");
}
else { //TODO [블루투스가 켜져있는지 확인]
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > getBleGpsStateCheck() 메소드 : 블루투스 지원 기기 확인]");
Log.d("","\n"+"[디바이스 : 블루투스를 지원하는 기기]");
Log.w("//===========//","================================================");
Log.d("---","---");
if(mBluetoothAdapter.isEnabled() == true){
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > getBleGpsStateCheck() 메소드 : 블루투스 기능 활성 확인]");
Log.d("","\n"+"[상태 : 블루투스 기능 활성]");
Log.w("//===========//","================================================");
Log.d("---","---");
//TODO [GPS 활성 상태 확인 실시]
try {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ //TODO 위치 권한 비활성인 경우
Log.d("---","---");
Log.e("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > getBleGpsStateCheck() 메소드 : GPS 위치 권한 활성 여부 확인]");
Log.d("","\n"+"[상태 : 비활성]");
Log.e("//===========//","================================================");
Log.d("---","---");
//TODO [Alert 팝업창 알림 실시]
getAlertDialog("[알림]",
"GPS 기능이 비활성 상태입니다.\nGPS 기능을 활성화해야 정상 기능 사용이 가능합니다.",
"설정", "취소", "");
}
else { //TODO 위치 권한 활성인 경우
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > getBleGpsStateCheck() 메소드 : GPS 위치 권한 활성 여부 확인]");
Log.d("","\n"+"[상태 : 활성]");
Log.w("//===========//","================================================");
Log.d("---","---");
state_result = true;
}
}
catch (Exception e){
e.printStackTrace();
}
}
else {
Log.d("---","---");
Log.e("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > getBleGpsStateCheck() 메소드 : 블루투스 기능 활성 확인]");
Log.d("","\n"+"[상태 : 블루투스 기능 비활성]");
Log.e("//===========//","================================================");
Log.d("---","---");
//TODO [Alert 팝업창 알림 실시]
getAlertDialog("[알림]",
"블루투스 기능이 비활성 상태입니다.\n블루투스 기능을 활성화해야 정상 기능 사용이 가능합니다.",
"설정", "취소", "");
}
}
}
catch (Exception e){
e.printStackTrace();
}
return state_result;
}
/** ========= [Alert 팝업창 호출 메소드 정의] ========= **/
public void getAlertDialog(String header, String content, String ok, String no, String normal){
//TODO [타이틀 및 내용 표시]
final String Tittle = String.valueOf(header);
final String Message = String.valueOf(content);
//TODO [버튼 이름 정의]
String buttonYes = String.valueOf(ok);
String buttonNo = String.valueOf(no);
String buttonNature = String.valueOf(normal);
try {
//TODO [AlertDialog 팝업창 생성]
new AlertDialog.Builder(A_AA_Test_Java.this)
.setTitle(Tittle) //[팝업창 타이틀 지정]
//.setIcon(R.drawable.tk_app_icon) //[팝업창 아이콘 지정]
.setMessage(Message) //[팝업창 내용 지정]
.setCancelable(false) //[외부 레이아웃 클릭시도 팝업창이 사라지지않게 설정]
.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if(Message.contains("블루투스") && Message.contains("비활성")){
goBleSettingsIntent(); //TODO [블루투스 설정창 이동 실시]
}
else if(Message.contains("GPS") && Message.contains("비활성")){
goGpsSettingsIntent(); //TODO [GPS 기능 설정창 이동 실시]
}
}
})
.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
})
.setNeutralButton(buttonNature, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
})
.show();
}
catch (Exception e){
Toast.makeText(getApplicationContext(), Tittle+"\n"+Message,Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
/** ========= [블루투스 및 GPS 설정창 인텐트 이동] ========= **/
public void goBleSettingsIntent(){
try {
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > goBleSettingsIntent() 메소드 : 블루투스 설정창 인텐트 이동 실시]");
Log.w("//===========//","================================================");
Log.d("---","---");
Intent go_ble = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
go_ble.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(go_ble);
overridePendingTransition(0, 0);
}
catch (Exception e){
e.printStackTrace();
}
}
public void goGpsSettingsIntent(){
try {
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_AA_Test_Java > goGpsSettingsIntent() 메소드 : 위치 권한 설정창 인텐트 이동 실시]");
Log.w("//===========//","================================================");
Log.d("---","---");
Intent go_gps = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
go_gps.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(go_gps);
overridePendingTransition(0, 0);
}
catch (Exception e){
e.printStackTrace();
}
}
/* =========================== */
/* =========================== */
[결과 출력]
/* =========================== */
반응형
'Android' 카테고리의 다른 글
Comments