[Java]안드로이드 권한요청 class


 

어플을 개발하다보면 권한요청을 해야하는 경우가 많이 생깁니다.

특히 센서나, 저장소의 권한을 요청하는 경우가 많은데 이를 조금 더 편하게 사용할 수 있도록 Class로 만들었습니다.

사용방법은 심플합니다.

프로젝트에 .class 파일 넣어주고! 객체 생성해서! 함수한번 실행해주면 끝나게 만들어놨습니다!

(혼자 쓰다가 같이 쓰면 좋을것 같아서..)

 

Github 권한요청 Class : https://github.com/dawon-karzin/Android_PermissionCheck_Java

 

dawon-karzin/Android_PermissionCheck_Java

안드로이드 권한 요청 클래스입니다.(java). Contribute to dawon-karzin/Android_PermissionCheck_Java development by creating an account on GitHub.

github.com

 -> 버그등은 이슈로 남겨주시면 빠른시일내에 수정토록하겠습니다.

 

 - 구조

  • 클래스명 : PermissionCheck
  • 생성자 파라미터 : Activity
  • 내부 함수 :
    •   check(List<String>)
    •   permissionGranted()
  • 실행 방식 :
    • PermissionCheck 객체 생성(생성시 현 Activity를 매개변수로 전달)
    • 권한 요청을 받아야하는 List를 전달하여 check함수 실행
    • check함수 내에서 매개변수로 전달받은 List를 확인하여 권한이 부여되지 않은(Denied) 권한을 List로 생성
    • 이후 permissionGranted 함수를 실행하여 권한이 부여되지 않은(Denied) 권한에 대하여 요청(request)을 함
  • 사용 방법 :
    •   permission처리를 할 activity 상속 클래스에서 PermissionCheck 클래스 선언.
    •   check함수(파라미터로 permission 리스트를 전달) 사용함으로써 유저에게 권한요청 실행
//권한요청을 받을 List 생성
List myPermission = Arrays.asList( new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE});

//권한요청 class 생성 (생성시 지금의 Activity를 매개변수로 전달)
PermissionCheck permissionCheck = new PermissionCheck(this); 

//권한요청 시작(권한요청을 받아야하는 List를 매개변수로 전달)
permissionCheck.check(myPermission);

 

-> 개인적으로 개발할때 class 옮겨가며 사용하는 중인데, 생각해보니 permissionDeniedList 변수를 왜 전역으로 선언 했는지 기억이 안나네요;; 무언가 이유가 있었던 것 같은데....... 졸면서 해서그런가;;; (나중에 생각나면 업데이트 해놓겠습니다.)

 

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른시일내에 조치하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 

 

 


[Kotlin]안드로이드 권한 요청


 

 

권한요청은 JAVA 버전도 만들었었지만 이번에 개발하는 Kotlin(이하 코틀린)에서 사용할 권한 요청을 정리해 보았습니다. (JAVA는 추후에 다시)

 

1. JAVA와 동일하게 AndroidManifest.xml에서 권한을 요청할 permission을 지정해줍니다.

 예 ) <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

      //저장소 쓰기에 대한 권한 요청

2. PermissionCheck Class (아래 소스코드 참고)

class PermissionCheck(val permissionActivity: Activity, val requirePermissions: Array<String>) {

    private val permissionRequestCode = 100

    //권한 체크용
    public fun permissionCheck() {
        var failRequestPermissionList = ArrayList<String>()

        for(permission in  requirePermissions) {
            if(ContextCompat.checkSelfPermission(permissionActivity.applicationContext, permission) != PackageManager.PERMISSION_GRANTED) {
                failRequestPermissionList.add(permission)
            }
        }

        if(failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)
            ActivityCompat.requestPermissions(permissionActivity, failRequestPermissionList.toArray(array), permissionRequestCode)
        }
    }
}

 - 첫번째 매개변수는 Activity를 넘겨받으며, 두번째 매개변수는 Array 즉, 권한요청할 permission의 배열을 받아옵니다.

 - permissionCheck 함수를 돌려주면 permission 배열내에서 권한승인이 되지않은 권한을 모드 failRequestPermissionList 로 담아줍니다. 담아준 결과는 Empty 즉, 빈값이 아니라면 권한을 요청하게됩니다.

 

3. 실행할 위치에 권한요청할 permission의 Array를 생성해주고(아래 requestPermissions), PermissionCheck 클래스의 permissionCheck 함수를 실행해줍니다.

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)

  var requestPermissions = arrayOf(
  Manifest.permission.WRITE_EXTERNAL_STORAGE
  )

  val permissionCheck = PermissionCheck(this, requestPermissions)
  permissionCheck.permissionCheck()
}

 

** 만일 permissionCheck 함수를 실행하지 않고 바로 실행하고 싶다면 init 활용 (아래 참조)

class PermissionCheck(val permissionActivity: Activity, val requirePermissions: Array<String>) {

    private val permissionRequestCode = 100

    //권한 체크용
    init {
        var failRequestPermissionList = ArrayList<String>()

        for(permission in  requirePermissions) {
            if(ContextCompat.checkSelfPermission(permissionActivity.applicationContext, permission) != PackageManager.PERMISSION_GRANTED) {
                failRequestPermissionList.add(permission)
            }
        }

        if(failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)
            ActivityCompat.requestPermissions(permissionActivity, failRequestPermissionList.toArray(array), permissionRequestCode)
        }
    }
}

 -> 사용시에는 아래처럼 PermissionCheck 클래스에 매개변수만 담아주면 권한체크가 실행됩니다.

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)

  var requestPermissions = arrayOf(
  Manifest.permission.WRITE_EXTERNAL_STORAGE
  )

  PermissionCheck(this, requestPermissions)
}

 

*** Reference : https://developer.android.com/training/permissions/requesting?hl=ko

*** 소스에 문제가 있을 시 댓글 달아주시면 최신화하도록하겠습니다.

+ Recent posts