PermissionsDispatcher
4.8.0
PermissionsDispatcher는 런타임 권한을 처리하기 위한 간단한 주석 기반 API를 제공합니다.
이 라이브러리는 코드를 깨끗하고 안전하게 유지하기 위해 권한 부여 여부에 관계없이 여러 확인 문을 작성하는 부담을 덜어줍니다.
다음은 Manifest.permission.CAMERA
필요한 MainActivity
를 등록하는 최소 예입니다.
AndroidManifest.xml
에 다음 줄을 추가합니다.
<uses-permission android:name="android.permission.CAMERA" />
PermissionsDispatcher는 일반 API를 간결하게 유지하면서 몇 가지 주석만 도입합니다.
참고: 주석이 달린 메서드는
private
이면 안 됩니다.
주석 | 필수의 | 설명 |
---|---|---|
@RuntimePermissions | ✓ | 권한을 처리하기 위해 Activity 또는 Fragment 등록하세요. |
@NeedsPermission | ✓ | 하나 이상의 권한이 필요한 작업을 수행하는 메서드에 주석을 답니다. |
@OnShowRationale | 권한이 필요한 이유를 설명하는 방법에 주석을 답니다. 사용자 입력 시 현재 권한 요청을 계속하거나 중단하는 데 사용할 수 있는 PermissionRequest 개체를 전달합니다. 메소드 컴파일러에 대한 인수를 지정하지 않으면 process${NeedsPermissionMethodName}ProcessRequest 및 cancel${NeedsPermissionMethodName}ProcessRequest 생성됩니다. PermissionRequest 대신 해당 메소드를 사용할 수 있습니다(예: DialogFragment 사용). | |
@OnPermissionDenied | 사용자가 권한을 부여하지 않는 경우 호출되는 메소드에 주석을 답니다. | |
@OnNeverAskAgain | 사용자가 장치에서 권한에 대해 "다시 묻지 않음"을 선택하면 호출되는 메서드에 주석을 답니다. |
@RuntimePermissions
class MainActivity : AppCompatActivity (), View.OnClickListener {
@NeedsPermission( Manifest .permission. CAMERA )
fun showCamera () {
supportFragmentManager.beginTransaction()
.replace( R .id.sample_content_fragment, CameraPreviewFragment .newInstance())
.addToBackStack( " camera " )
.commitAllowingStateLoss()
}
@OnShowRationale( Manifest .permission. CAMERA )
fun showRationaleForCamera ( request : PermissionRequest ) {
showRationaleDialog( R .string.permission_camera_rationale, request)
}
@OnPermissionDenied( Manifest .permission. CAMERA )
fun onCameraDenied () {
Toast .makeText( this , R .string.permission_camera_denied, Toast . LENGTH_SHORT ).show()
}
@OnNeverAskAgain( Manifest .permission. CAMERA )
fun onCameraNeverAskAgain () {
Toast .makeText( this , R .string.permission_camera_never_askagain, Toast . LENGTH_SHORT ).show()
}
}
이제 생성된 함수는 Java 버전보다 훨씬 더 간결하고 직관적이 되었습니다!
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
setContentView( R .layout.activity_main)
findViewById( R .id.button_camera).setOnClickListener {
// NOTE: delegate the permission handling to generated function
showCameraWithPermissionCheck()
}
}
override fun onRequestPermissionsResult ( requestCode : Int , permissions : Array < String >, grantResults : IntArray ) {
super .onRequestPermissionsResult(requestCode, permissions, grantResults)
// NOTE: delegate the permission handling to generated function
onRequestPermissionsResult(requestCode, grantResults)
}
자세한 내용은 샘플을 확인하세요.
메모:
프로젝트에 PermissionsDispatcher를 추가하려면 앱 모듈 build.gradle
파일에 다음을 포함하세요.
${latest.version}
은(는)
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
annotationProcessor " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
코틀린을 사용하면:
apply plugin : ' kotlin-kapt '
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
kapt " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
Copyright 2016 Shintaro Katafuchi, Marcel Schnelle, Yoshinori Isogai
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.