철스토리

TedPermission - 안드로이드 6.0 마시멜로우 권한설정 라이브러리 본문

안드로이드/유용한 라이브러리

TedPermission - 안드로이드 6.0 마시멜로우 권한설정 라이브러리

HyunChol 2016. 10. 1. 02:41
반응형

* 참고 사이트

http://gun0912.tistory.com/55

http://gun0912.tistory.com/61

https://github.com/ParkSangGwon/TedPermission


----------------------------------------------------------------------------------------------------------------------



# TedPermission 이란?


  안드로이드 6.0 마시멜로우에서 권한관련된 내용이 추가되면서 많은 부분 불편하게 되었다. 기존에 되던 앱들이 죽는 현상이 발생하며... 여러가지 불편한 점들이 많았다. 이러한 부분을 간단하게 해결하기 위해 박상권님의 블로그를 통해 알게된 TedPermission을 소개하려고 한다. 왜 만들었는지, 원리가 어떻게 되는지는 참고사이트의 박상권님 블로그를 통해서 직접 확인하실 수 있습니다.





# TedPermission 사용방법


1. gradle에 추가

 - build.gradle (Project: xxxxxx)

allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}

 - build.gradle (Module: app)

compile 'com.github.ParkSangGwon:TedPermission:v1.0.11'


2. PermissionListener 생성

 - 리스너를 만든다

 - 이 리스너는 안에는 권한이 허가 되었을 경우와 허가되지 않았을 경우에 어떤일을 할지 결정하는 리스너

PermissionListener permissionlistener = new PermissionListener() {
@Override
public void onPermissionGranted() {
Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_SHORT).show();

checkExternalStorage();

String data = "파일 생성내용....";

try {
File path = Environment.getExternalStoragePublicDirectory
(Environment.DIRECTORY_PICTURES);
File f = new File(path, "external.txt"); // 경로, 파일명
FileWriter write = new FileWriter(f, false);
PrintWriter out = new PrintWriter(write);
out.println(data);
out.close();
Log.d("test", "저장완료");
} catch (Exception e) {
e.printStackTrace();
}

}

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


};



3. 권한체크 클래스 호출

 - .setPermissions() 부분에 필요한 권한을 넣는다.

 - .setPermissions() 부분에 권한을 여러개 넣을때는 콤마(,)로 구분하여 여러개를 추가할 수 있다.

new TedPermission(this)
.setPermissionListener(permissionlistener)
.setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION)
.check();


4. 예제소스


public class MainActivity extends AppCompatActivity {

private String state;

@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, "Permission Granted", Toast.LENGTH_SHORT).show();

checkExternalStorage();

String data = "파일 생성내용....";

try {
File path = Environment.getExternalStoragePublicDirectory
(Environment.DIRECTORY_PICTURES);
File f = new File(path, "external.txt"); // 경로, 파일명
FileWriter write = new FileWriter(f, false);
PrintWriter out = new PrintWriter(write);
out.println(data);
out.close();
Log.d("test", "저장완료");
} catch (Exception e) {
e.printStackTrace();
}

}

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


};


new TedPermission(this)
.setPermissionListener(permissionlistener)
.setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION)
.check();



}

boolean checkExternalStorage() {
state = Environment.getExternalStorageState();
// 외부메모리 상태
if (Environment.MEDIA_MOUNTED.equals(state)) {
// 읽기 쓰기 모두 가능
Log.d("test", "외부메모리 읽기 쓰기 모두 가능");
return true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
//읽기전용
Log.d("test", "외부메모리 읽기만 가능");
return false;
} else {
// 읽기쓰기 모두 안됨
Log.d("test", "외부메모리 읽기쓰기 모두 안됨 : "+ state);
return false;
}
}
}



5. 기타 (커스터마이징 함수)

 - setRationaleMessage()

  : 권한을 요청하기전에 이 권한이 필요한 이유에 대해서 설명하는 메세지를 설정


 - setRationaleConfirmText()

  : 권한이 필요한 이유에 대해서 설명하는 디이얼로그에서 [확인]버튼 텍스트를 설정


 - setDeniedCloseButtonText()

  : 거부했을 때 보여지는 메시지 다이얼로그에서 [닫기]버튼 텍스트를 설정


 - setGotoSettingButton()

  : 사용자가 권한을 거부했을 때 보여지는 메시지에서 '설정' 화면으로 갈 수 있는 버튼을 보여줄지 여부를 결정


 - setGotoSettingButtonText()

  : '설정'화면으로 갈 수 있는 버튼을 보여주는경우 해당 버튼의 텍스트를 설정




반응형
Comments