EasyPermissions는 Android M 이상을 대상으로 할 때 기본 시스템 권한 논리를 단순화하는 래퍼 라이브러리입니다.
참고: 앱이 Kotlin으로 작성된 경우 핵심 EasyPermissions 라이브러리에 Kotlin 확장을 추가하는 easypermissions-ktx 라이브러리를 고려해 보세요.
EasyPermissions는 build.gradle
파일에 다음 종속성을 추가하여 설치됩니다.
dependencies {
// For developers using AndroidX in their applications
implementation ' pub.devrel:easypermissions:3.0.0 '
// For developers using the Android Support Library
implementation ' pub.devrel:easypermissions:2.0.1 '
}
EasyPermissions 사용을 시작하려면 Activity
(또는 Fragment
)가 onRequestPermissionsResult
메서드를 재정의하도록 합니다.
public class MainActivity extends AppCompatActivity {
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
}
@ Override
public void onRequestPermissionsResult ( int requestCode , String [] permissions , int [] grantResults ) {
super . onRequestPermissionsResult ( requestCode , permissions , grantResults );
// Forward results to EasyPermissions
EasyPermissions . onRequestPermissionsResult ( requestCode , permissions , grantResults , this );
}
}
아래 예에서는 CAMERA
및 ACCESS_FINE_LOCATION
권한이 모두 필요한 메서드에 대한 권한을 요청하는 방법을 보여줍니다. 몇 가지 참고할 사항이 있습니다.
EasyPermissions#hasPermissions(...)
사용하여 앱에 필요한 권한이 이미 있는지 확인하세요. 이 메서드는 최종 인수로 여러 권한을 사용할 수 있습니다.EasyPermissions#requestPermissions
로 권한을 요청합니다. 이 방법은 시스템 권한을 요청하고 필요한 경우 제공된 근거 문자열을 표시합니다. 제공된 요청 코드는 이 요청에 대해 고유해야 하며 메서드는 최종 인수로 원하는 수의 권한을 사용할 수 있습니다.AfterPermissionGranted
주석을 사용합니다. 이는 선택 사항이지만 편의를 위해 제공됩니다. 특정 요청의 모든 권한이 부여되면 적절한 요청 코드가 주석된 모든 메서드가 실행됩니다(고유한 요청 코드가 있어야 함). 주석이 달린 메서드는 입력 매개변수가 없어야 하며 , 억제된 매개변수의 상태를 유지하기 위해 onSaveInstanceState를 사용할 수 있습니다. 이는 모든 권한이 부여된 후 요청 메서드를 실행해야 하는 일반적인 흐름을 단순화하기 위한 것입니다. 이는 onPermissionsGranted
콜백에 논리를 추가하여 달성할 수도 있습니다. @ AfterPermissionGranted ( RC_CAMERA_AND_LOCATION )
private void methodRequiresTwoPermission () {
String [] perms = { Manifest . permission . CAMERA , Manifest . permission . ACCESS_FINE_LOCATION };
if ( EasyPermissions . hasPermissions ( this , perms )) {
// Already have permission, do the thing
// ...
} else {
// Do not have permissions, request them now
EasyPermissions . requestPermissions ( this , getString ( R . string . camera_and_location_rationale ),
RC_CAMERA_AND_LOCATION , perms );
}
}
또는 근거 대화 상자를 더 세밀하게 제어하려면 PermissionRequest
사용하세요.
EasyPermissions . requestPermissions (
new PermissionRequest . Builder ( this , RC_CAMERA_AND_LOCATION , perms )
. setRationale ( R . string . camera_and_location_rationale )
. setPositiveButtonText ( R . string . rationale_ask_ok )
. setNegativeButtonText ( R . string . rationale_ask_cancel )
. setTheme ( R . style . my_fancy_style )
. build ());
선택적으로 더 세부적인 제어를 위해 Activity
/ Fragment
이 PermissionCallbacks
인터페이스를 구현하도록 할 수 있습니다.
public class MainActivity extends AppCompatActivity implements EasyPermissions . PermissionCallbacks {
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
}
@ Override
public void onRequestPermissionsResult ( int requestCode , String [] permissions , int [] grantResults ) {
super . onRequestPermissionsResult ( requestCode , permissions , grantResults );
// Forward results to EasyPermissions
EasyPermissions . onRequestPermissionsResult ( requestCode , permissions , grantResults , this );
}
@ Override
public void onPermissionsGranted ( int requestCode , List < String > list ) {
// Some permissions have been granted
// ...
}
@ Override
public void onPermissionsDenied ( int requestCode , List < String > list ) {
// Some permissions have been denied
// ...
}
}
어떤 경우에는 특정 권한이 없으면 앱이 제대로 작동하지 않을 수 있습니다. 사용자가 "다시 묻지 않음" 옵션을 사용하여 이러한 권한을 거부하면 사용자에게 이러한 권한을 요청할 수 없으며 앱 설정에서 변경해야 합니다. EasyPermissions.somePermissionPermanentlyDenied(...)
메서드를 사용하여 이 상황에서 사용자에게 대화 상자를 표시하고 앱의 시스템 설정 화면으로 안내할 수 있습니다.
참고 : Android 프레임워크 권한 API가 제공하는 정보의 제한으로 인해 somePermissionPermanentlyDenied
메소드는 권한이 거부되고 앱이 onPermissionsDenied
콜백을 수신한 후에만 작동합니다. 그렇지 않으면 도서관은 "아직 거부되지 않은" 경우와 영구 거부를 구별할 수 없습니다.
@ Override
public void onPermissionsDenied ( int requestCode , List < String > perms ) {
Log . d ( TAG , "onPermissionsDenied:" + requestCode + ":" + perms . size ());
// (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."
// This will display a dialog directing them to enable the permission in app settings.
if ( EasyPermissions . somePermissionPermanentlyDenied ( this , perms )) {
new AppSettingsDialog . Builder ( this ). build (). show ();
}
}
@ Override
public void onActivityResult ( int requestCode , int resultCode , Intent data ) {
super . onActivityResult ( requestCode , resultCode , data );
if ( requestCode == AppSettingsDialog . DEFAULT_SETTINGS_REQ_CODE ) {
// Do something after user returned from app settings screen, like showing a Toast.
Toast . makeText ( this , R . string . returned_from_app_settings_to_activity , Toast . LENGTH_SHORT )
. show ();
}
}
근거 대화 상자와 상호 작용하려면 EasyPermissions.RationaleCallbacks
를 구현하십시오.
@ Override
public void onRationaleAccepted ( int requestCode ) {
// Rationale accepted to request some permissions
// ...
}
@ Override
public void onRationaleDenied ( int requestCode ) {
// Rationale denied to request some permissions
// ...
}
근거 콜백이 반드시 권한 변경을 의미하는 것은 아닙니다. 이를 확인하려면 EasyPermissions.PermissionCallbacks
를 참조하세요.
Copyright 2017 Google
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.