개발자

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

2023년 04월 16일조회 285

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 '인 경우 이전에 사용자가 "다시 묻지 않음"을 선택한 경우입니다. 이 경우 다시 권한 요청을 할 수 없으므로, 사용자에게 직접 설정에서 권한을 허용하도록 안내해주는 것이 좋습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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)
        }
    } else {
        // 권한이 이미 허용된 경우 처리할 코드
    }
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    when (requestCode) {
        PERMISSION_REQUEST_BLUETOOTH_CONNECT -> {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 권한이 허용된 경우 처리할 코드
            } else {
                if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.BLUETOOTH_CONNECT)) {
                    // 이전에 권한 요청 다이얼로그에서 "다시 묻지 않음"을 선택한 경우
                    Toast.makeText(this, "권한이 거부되었습니다. 설정에서 권한을 허용해주세요.", Toast.LENGTH_LONG).show()
                } else {
                    // 권한이 거부된 경우 권한 요청 다이얼로그를 다시 띄움
                    checkBlueToothConnectPermission()
                }
            }
        }
    }
}

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

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

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

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

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