개발자

안드로이드 블루투스 권한 요청

2023년 04월 16일조회 365

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) if (bluetoothAdapter == null) { Toast.makeText(this, "블루투스를 지원하지않는 기기입니다", Toast.LENGTH_SHORT).show() finish() } setContentView(binding.root) binding.btn3.setOnClickListener { checkBlueToothConnectPermission() } } override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == PERMISSION_REQUEST_BLUETOOTH_CONNECT) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 권한이 허용된 경우 처리할 코드 } else { Toast.makeText(this, "BLUETOOTH_CONNECT 권한이 필요합니다.", Toast.LENGTH_SHORT).show() } } } fun checkBlueToothConnectPermission() {//앱에서 블루투스 연결 권한이 있는지 확인하고 없는경우 권한을 요청하는데 사용됨 if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED ) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.BLUETOOTH_CONNECT)){ AlertDialog.Builder(this) .setTitle("권한 요청") .setMessage("블루투스 연결 권한이 필요합니다.") .setPositiveButton("확인") { _, _ -> ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), PERMISSION_REQUEST_BLUETOOTH_CONNECT ) } .setNegativeButton("취소", null) .show() }else{ ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), PERMISSION_REQUEST_BLUETOOTH_CONNECT ) } } } 버튼을 눌러서 권한요청을하는데 거부를 했다면 다시한번 눌렀을때 다시권한요청을 하고싶은데 어떻게 하시는지 아시는분 계신가요ㅜ 한번 거부가 되면 요청다이얼로그가 뜨지않는걸 알고 대화상자로 처리할라고하는데 대화상자도 안뜨네요 ㅜ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

강병진님의 프로필 사진

최초로 권한을 요청했을 때 사용자가 거절하면 다시 권한을 요청할 수는 없고 설정으로 redirect 시켜서 사용자가 직접 권한을 부여하도록 해야합니다. 안드로이드 11부터 말씀하신 dialog는 뜨지 않게 되어있습니다. 아래 링크를 참고하세요! https://developer.android.com/about/versions/11/privacy/permissions#dialog-visibility

김교린님의 프로필 사진

김교린

작성자

SBS아카데미컴퓨터아트학원 앱개발2023년 04월 16일

정말 너무너무 감사드려요 축복받으실거에요 감사합니다

커리어리 AI 봇님의 프로필 사진

안드로이드에서 권한을 거부하면 ' shouldShowRequestPermissionRationale() ' 메서드가 ' true '를 반환하게 됩니다. 이 메서드를 사용하여 이전에 권한을 거부한 이력이 있는지 확인하고, 있다면 사용자에게 권한을 필요로 하는 이유를 설명하고 권한 요청 다이얼로그를 다시 띄울 수 있습니다. 다음은 해당 기능을 구현한 코드입니다. 권한을 다시 요청하는 경우 ' checkBlueToothConnectPermission() ' 메서드를 호출하면 됩니다. 다시 권한 요청 다이얼로그를 띄우기 위해서는 ' ActivityCompat.shouldShowRequestPermissionRationale() ' 메서드의 반환값이 ' true '인지 확인해야 합니다. 반환값이 ' false '인 경우 이전에 사용자가 "다시 묻지 않음"을 선택한 경우입니다. 이 경우 다시 권한 요청을 할 수 없으므로, 사용자에게 직접 설정에서 권한을 허용하도록 안내해주는 것이 좋습니다.

1fun checkBlueToothConnectPermission() {
2    if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
3        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.BLUETOOTH_CONNECT)){
4            AlertDialog.Builder(this)
5                .setTitle("권한 요청")
6                .setMessage("블루투스 연결 권한이 필요합니다.")
7                .setPositiveButton("확인") { _, _ ->
8                    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), PERMISSION_REQUEST_BLUETOOTH_CONNECT)
9                }
10                .setNegativeButton("취소", null)
11                .show()
12        } else {
13            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), PERMISSION_REQUEST_BLUETOOTH_CONNECT)
14        }
15    } else {
16        // 권한이 이미 허용된 경우 처리할 코드
17    }
18}
19
20override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
21    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
22    when (requestCode) {
23        PERMISSION_REQUEST_BLUETOOTH_CONNECT -> {
24            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
25                // 권한이 허용된 경우 처리할 코드
26            } else {
27                if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.BLUETOOTH_CONNECT)) {
28                    // 이전에 권한 요청 다이얼로그에서 "다시 묻지 않음"을 선택한 경우
29                    Toast.makeText(this, "권한이 거부되었습니다. 설정에서 권한을 허용해주세요.", Toast.LENGTH_LONG).show()
30                } else {
31                    // 권한이 거부된 경우 권한 요청 다이얼로그를 다시 띄움
32                    checkBlueToothConnectPermission()
33                }
34            }
35        }
36    }
37}

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!