일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 인증서 정보 뽑아내기
- 공인인증서 정보
- 공인인증서 만료일
- appbarlayout
- Objective C
- apache
- IOS10
- Magnify Anim
- apns
- so file
- apk 다운사이징
- ios
- android log dump
- IMAGE
- SO 파일
- V8 Engine
- JavaScript Engine
- FlexiblePageView
- Android
- ios framework
- v8 engine xcode build
- Status Bar
- Android NDK시스템
- PageControl
- Google V8 Engine
- sha1 convert hashkey
- java
- embedd
- Push
- 안드로이드
- Today
- Total
caTea 블로그
android permission activity 본문
Utils 클래스는 널체크 용이므로 본인이 수정하여 사용하면 됨
Constans 클래스는 상수 정의 클래스 본인이 만들어서 사용
매니패스트는 아래와 같이 한쌍으로 사용해야 Manifast.permission 에 보이게된다.
자세한 내용은 구글 가이드 문서 참조
<uses-permission android:name="android.permission.CAMERA" /><permission
android:name="android.permission.CAMERA"
android:protectionLevel="signature" />
====================================================
/**
* 마시멜로우 버전부터 퍼미션이 추가되었다 하여 퍼미션을 적용하는 로직을 베이스 액티비티에서
* 담당하도록 하였다.
*/
public class BaseActivity extends AppCompatActivity {
private final String TAG = this.getClass().getSimpleName();
private int permissionTag = 0;
private PermissionVO mPermissionVO;
private boolean shouldShow = false;
private ArrayList<PermissionVO> mPermissionList;
private boolean mIsFirstRun;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 앱을 처음 실행시킨 여부확인
mIsFirstRun = Utils.getSharedPreference(this, "isFirstRun", true);
Log.d(TAG, "mIsFirstRun :: "+mIsFirstRun);
}
/**
* 단일 안드로이드 권한 요청
* @param permission Manifast.permission.요청퍼미션
* @param tag 요청 태그
*/
@TargetApi(Build.VERSION_CODES.M)
protected void checkPermission(String permission, int tag){
permissionTag = tag;
if(Utils.isNull(permission) == false){
if(ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED){
//Manifest.permission.READ_CALENDAR이 접근 승낙 상태 일때
permissionGranted(tag);
}else{
//Manifest.permission.READ_CALENDAR이 접근 거절 상태 일때
if(ActivityCompat.shouldShowRequestPermissionRationale(this,permission)){
//최초 접속이 아니고, 사용자가 다시 보지 않기에 체크를 하지 않고, 거절만 누른경우
shouldShow = true;
}else{
//최초 접속시, 사용자가 다시 보지 않기에 체크를 했을 경우
shouldShow = false;
}
//만약 사용자가 다시 보지 않기에 체크를 했을 경우엔 권한 설정 다이얼로그가 뜨지 않는다.
//사용자에게 접근권한 설정을 요구하는 다이얼로그를 띄운다.
ActivityCompat.requestPermissions(this,new String[]{permission},tag);
}
}
}
/**
* 멀티 안드로이드 권한 요청
* @param permissionList
* @param tag 요청 태그
* */
protected void checkPermission(ArrayList<PermissionVO> permissionList, int tag){
if(permissionList != null){
permissionTag = tag;
mPermissionList = permissionList;
String[] permissions = new String[permissionList.size()];
for (int i=0; i < permissionList.size(); i++) {
permissions[i] = permissionList.get(i).getmPermissionName();
}
for(int i=0; i < permissions.length; i++){
if(ContextCompat.checkSelfPermission(this, permissions[i]) == PackageManager.PERMISSION_GRANTED){
//Manifest.permission.READ_CALENDAR이 접근 승낙 상태 일때
mPermissionList.get(i).setmGranted(true);
}else{
//Manifest.permission.READ_CALENDAR이 접근 거절 상태 일때
if(ActivityCompat.shouldShowRequestPermissionRationale(this,permissions[i])){
//최초 접속이 아니고, 사용자가 다시 보지 않기에 체크를 하지 않고, 거절만 누른경우
mPermissionList.get(i).setmShouldShow(true);
}else{
//최초 접속시, 사용자가 다시 보지 않기에 체크를 했을 경우
mPermissionList.get(i).setmShouldShow(false);
}
//만약 사용자가 다시 보지 않기에 체크를 했을 경우엔 권한 설정 다이얼로그가 뜨지 않는다.
//사용자에게 접근권한 설정을 요구하는 다이얼로그를 띄운다.
ActivityCompat.requestPermissions(this, permissions, tag);
}
}
}
}
// protected void checkPermissions(ArrayList<PermissionVO> permissionList){
//
// checkPermission(permissions, MUNTI_REQUEST_PERMISSION);
// }
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
// 어플리케이션의 처음시작시 거절하게되면 shouldShow 가 다시보지않기의 값으로 날라오기떄문에 첫시작시
// shouldShow 를 true 로 강제로 박아준다
if(mIsFirstRun) {
shouldShow = true;
Utils.setSharedPreference(this, "isFirstRun", false);
mIsFirstRun = false;
}
switch (requestCode) {
case Constants.PERMISSION_LOCATION: {
// If request is cancelled, the result arrays are empty.
Log.d(TAG, "reqest Permission :: " + permissions.length);
Log.d(TAG, "reqest grantResults :: " + grantResults.length);
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
permissionGranted(permissionTag);
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
permissionDenied(shouldShow, permissionTag);
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
case Constants.PERMISSION_MULTI: {
if (grantResults.length > 0) {
for(int i=0; i < grantResults.length; i++){
Log.d(TAG, "permission ::" + permissions[i]);
Log.d(TAG, "granted ::" + grantResults[i]);
if(grantResults[i] == PackageManager.PERMISSION_GRANTED){
mPermissionList.get(i).setmGranted(true);
}else{
mPermissionList.get(i).setmGranted(false);
}
}
permissionResultMulti(mPermissionList);
}
return;
}
}
}
/**
* 단일 퍼미션 요청 성공
* @param permissionIndex 요청 태그
*/
protected void permissionGranted(int permissionIndex){
}
/**
* 단일 퍼미션 요청 실패
* @param shouldShow 퍼미션 요청 다이얼로그 보여준여부와 다시보지않기 여부
* @param permissionIndex 요청 태그
*/
protected void permissionDenied(boolean shouldShow, int permissionIndex){
}
/**
* 멀티 퍼미션 요청 결과
* @param resultList 요청결과
*/
protected void permissionResultMulti(ArrayList<PermissionVO> resultList){
}
}
====================================================================================================
/**
* Created by achee7059 on 2017. 2. 20..
*/
public class PermissionVO {
/**
* 요청 퍼미션 이름
*/
private String mPermissionName;
/**
* 이 요청을 보여준 여부와 다시보지않기 버튼여부
*/
private boolean mShouldShow;
/**
* 퍼미션 허용여부
*/
private boolean mGranted;
/**
* 요청 태그
*/
private int mTag;
public PermissionVO(String permissionName, int tag){
mPermissionName = permissionName;
mTag = tag;
}
public boolean ismShouldShow() {
return mShouldShow;
}
public void setmShouldShow(boolean mShouldShow) {
this.mShouldShow = mShouldShow;
}
public String getmPermissionName() {
return mPermissionName;
}
public void setmPermissionName(String mPermissionName) {
this.mPermissionName = mPermissionName;
}
public int getmTag() {
return mTag;
}
public void setmTag(int mTag) {
this.mTag = mTag;
}
public boolean ismGranted() {
return mGranted;
}
public void setmGranted(boolean mGranted) {
this.mGranted = mGranted;
}
}
==================================================================================
사용 예
public class IntroActivity extends BaseActivity{
private final String TAG = getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intro);
// 멀티 요청
// checkPermission();
// ArrayList<PermissionVO> permissionList = new ArrayList<PermissionVO>();
// permissionList.add(new PermissionVO(Manifest.permission.ACCESS_COARSE_LOCATION, 0));
// permissionList.add(new PermissionVO(Manifest.permission.CAMERA, 1));
checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, Constants.PERMISSION_LOCATION);
}
@Override
public void permissionGranted(int permissionIndex) {
Log.d("BaseActivity", "permissionIndex :: " + permissionIndex);
}
@Override
public void permissionDenied(boolean shouldShow, int permissionIndex) {
Log.d(TAG, "ShouldShow::"+shouldShow);
if(shouldShow){
//구글의 요청 다이얼로그에서 거절을 누른경우
System.exit(1);
}else{
//전에 구글의 요청 다이얼로그에서 다시 보지 않기를 체크후 앱을 킨 경우.
//requestPermission을 쓰더라도 요청 다이얼로그가 뜨질 않고 곧바도 여길 탄다.
}
}
@Override
protected void permissionResultMulti(ArrayList<PermissionVO> resultList) {
for(PermissionVO vo : resultList){
Log.d(TAG, "permission :: " + vo.getmPermissionName());
Log.d(TAG, "permission :: " + vo.ismGranted());
}
}
}
'android' 카테고리의 다른 글
Magnify Anim View Pager (0) | 2017.03.13 |
---|---|
android frame animation class (0) | 2017.02.22 |
vertical view pager (0) | 2016.07.01 |
이미지 라운드 처리 클래스 (0) | 2016.06.28 |
android file upload and spring(image..) (1) | 2015.08.05 |