관리 메뉴

나만을 위한 블로그

[Android] TedPermission 사용법 본문

Android

[Android] TedPermission 사용법

참깨빵위에참깨빵_ 2020. 3. 24. 17:31
728x90
반응형

참고한 사이트 : https://gun0912.tistory.com/61

 

[안드로이드/Android]유용한 라이브러리 - TedPermission(마시멜로우 권한체크)

안드로이드 6.0 마시멜로우버전부터 개발자들에게는 귀찮은(?) 변경이 있었습니다. 카메라를 사용하거나 문자를 읽어오는 등의 권한을 사용할때 기존에는 앱을 다운받을때에만 사용자로부터 동의를 받으면 그이후..

gun0912.tistory.com

만드신 분의 블로그

 

https://link2me.tistory.com/1509

 

안드로이드 6.0 이상 위험권한(permission) 체크 with TedPermission

마시멜로 버전부터는 권한을 일반 권한(Normal Permission)과 위험 권한(Dangerous Permission)으로 나누었으며, 위험 권한의 경우에는 앱이 실행될 때 사용자에게 권한 부여할 것인지 물어보도록 변경되었다. 대..

link2me.tistory.com

이런 식으로도 코드를 짤 수 있구나 하고 참고한 블로그

 

 

안드로이드 앱 개발을 하다 보면 권한 설정의 벽에 마주치곤 한다.

인터넷, 갤러리 접근, SD 카드 접근 등등 어지간한 기능 구현 시에 꼭 필요한 필수요소라고 해도 과언이 아닌 듯하다.

그 때마다 일일이 접근 권한을 설정하는 코드를 검색하거나 찾는 것도 나름 일이었는데, 이런 고생을 꽤 많이 없애줄 권한 체크 라이브러리를 찾았다. 만드신 분께 무한 감사...

 

만드신 분의 블로그에도 사용법이 나와 있다. 설명도 잘 되어있어서 여길 먼저 정독하는 걸 추천한다.

다른 분들이 먼저 사용한 다음 알기 쉽게 설명을 써놓은 글도 검색하면 무수히 많다.

여기선 코드를 통째로 놓고 이런 식으로 쓴다는 것만 남겨두려고 한다.

xml 파일에는 이미지뷰 하나만 달랑 있는데 쓰진 않는다. 흰 배경이 밋밋해서 그냥 넣어둔 것 뿐이다.

 

먼저 사용하려면 라이브러리기 때문에 앱 수준 gradle 파일에 의존성 코드를 한 줄 넣어야 한다.

 

implementation 'gun0912.ted:tedpermission:2.0.0'

 

그리고 만드신 분이 예시로 사용하는 권한은 READ_CONTACTS니까 매니페스트에 미리 이걸 추가해둬야 한다.

난 이걸 까먹고 인터넷 권한을 갖다놓은 채 왜 안되는거지 하고 10분을 삽질했다.

 

<uses-permission android:name="android.permission.READ_CONTACTS"/>

 

아래는 xml, java 파일 코드들이다.

// activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/croppedImageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>

</LinearLayout>
// MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        PermissionListener permissionlistener = new PermissionListener() {
            @Override
            public void onPermissionGranted() {
                Toast.makeText(MainActivity.this, "권한 허가", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onPermissionDenied(ArrayList<String> deniedPermissions) {
                Toast.makeText(MainActivity.this, "권한 거부\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
            }

        };

        TedPermission.with(this)
                .setPermissionListener(permissionlistener)
                .setRationaleMessage("구글 로그인을 하기 위해서는 주소록 접근 권한이 필요해요")
                .setDeniedMessage("왜 거부하셨어요...\n하지만 [설정] > [권한] 에서 권한을 허용할 수 있어요.")
                .setPermissions(Manifest.permission.READ_CONTACTS)
                .check();

    }

}

 

이렇게 설정하고 앱을 빌드하면 아래와 같이 작동한다.

 

 

만약 여러 권한을 설정해야 한다면 이런 식으로도 사용 가능한 듯하다.

 

.setPermissions(new String[] { Manifest.permission.READ_EXTERNAL_STORAGE,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.CAMERA})

setPermissions()의 인자로 String 배열을 넣고 이 안에 내가 요청할 권한들을 때려박는 것이다.

아무튼 이 라이브러리를 쓰면 매우 편하게 권한 설정을 끝낼 수 있다.

반응형
Comments