개발자
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일
정말 너무너무 감사드려요 축복받으실거에요 감사합니다
안드로이드에서 권한을 거부하면 ' 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 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!