투케이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();
	}
}

/* =========================== */

/* =========================== */

[결과 출력]

/* =========================== */​

 

반응형
Comments