Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- procedure does not exist
- android hedisql #안드로이드 mariaDB #안드로이드 로그인 권한 #안드로이드 로그인
- XAMPP #PHP #mysql #Android #연동
- 안드로이드 타이머 #타이머 #handler timer #android handler timer #countdowntimer
- 리눅스 #우분투 포트포워딩 #리눅스 포트포워딩 #우분투22.04 php apache db #mariadb #mysql
- android #tip #timer #handler #sendmessagedelayed
- react #리액트 #프로젝트 초기세팅 #초기구현 #클린코드 #cleancode #node #react-node #vite #react 설치 #react 세팅 #쇼핑몰 #eslint 설정 #vite eslint #TailWindCSS란? #테일윈드적용 #TailWindCSS 적용
- nodejs #express #게시판 기능 구현
- react #react 프로젝트 생성 #초보 #쉽게 #react 세팅 #react frontend #리액트 기본구조
- db 프로시저 권한 부여 #db procedure 권한 부여 #
- 터미널 #terminal #aws 인스턴스 접속
- mariadb #mysql
- 부트스트랩 추가시 오류 #
- 회원가입 구현 #java
- mysql #dataloongforcolumn #ER_DATA_TOO_LONG #mariaDB #my.ini찾기 #숨김my.ini찾기 #strict mode 해제 #strict mode
- 안드로이드 아이콘 만들기 #안드로이드 vector asset #android vector asset custom #안드로이드 vector background color change #android pathdata editor #vector drawables edit #vector drawable background color #drawable background color #an
- MySQL #안드로이드 로그인기능 #안드로이드 php 오류 #안드로이드 db #
- 안드로이드 앱 아이콘 변경 #안드로이드 앱 아이콘 사이즈 #안드로이드 앱 아이콘 가이드
- Module not found: Error: Can't resolve '@popperjs/core'
- 부트스트랩 #bootstrap install #
- php #안드로이드 #로그인&회원가입
- 크롤링 #텍스트 크롤링 #파이썬 #구름IDE
- MySQL(MariaDB)접속 #MariaDB원격 접속 #콘솔에서mysql접속 #원격지에서MySQL #php안드로이드 연동
- Android #bottom navigation View #Bottom tab #FRAGMENT #JAVA #Material Design #안드로이드 프래그먼트 바텀 네비게이션 뷰 커스텀 #안드로이드 메뉴 아이콘 커스텀 #안드로이드 메뉴 #프래그먼트 메뉴 #fragment menu i
- hedisql #mariadb #mysql #마리아db #암호화 복호화 #aes512 #aes_encrypt #aes_decrypt #hedisql 펑션 생성 #hedisql 프로시저 생성 #hedisql 매개변수 #db 펑션 매개변수 #db 프로시저 #db 함수 #db return
- 안드로이드 #앱 아이콘 #앱 아이콘 커스텀하기 #앱 로고 만들기 #앱 아이콘 만들기 #android logo custom #android icon custom #android logo 만들기 #image asset #
- Apache #PHP #마리아DB #아파치
- my.ini위치 확인
- hedisql limit 1000
- 안드로이드 로그인 회원가입 기능 #안드로이드 php 로그인 #userValidate.php #android php 중복체그 #안드로이드 회원가입 id 중복체크 기능 #android login id check
Archives
- Today
- Total
맨땅에 코딩
[안드로이드] 권한 요청 팝업 (한번에 여러개 요청) 본문
목차
반응형
앱을 실행하자마자 필요한 권한들을 한번에 요청하기 위한 코드
Multi Permission(멀티 퍼미션)을 사용한 다중 권한 요청
우선 AndroidManifiest에 필요한 권한들을 추가해줍니다.
https://developer.android.com/reference/android/Manifest.permission
여기서 필요한 권한을 확인해주신 후 추가해주시면 됩니다
[ AndroidManifest.xml ]
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
저는 전화, 위치에 대한 권한을 추가해주었습니다(총 2개, 그 이상도 추가가 가능합니다)
권한에 대한 Class도 하나 생성해줍니다
[ PermissionSupport.java ]
public class PermissionSupport {
private Context context;
private Activity activity;
//요청할 권한 배열 저장
private String[] permissions = {
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION
};
private List permissionList;
//권한 요청시 발생하는 창에 대한 결과값을 받기 위해 지정해주는 int 형
//원하는 임의의 숫자 지정
private final int MULTIPLE_PERMISSIONS = 1023; //요청에 대한 결과값 확인을 위해 RequestCode를 final로 정의
//생성자에서 Activity와 Context를 파라미터로 받아
public PermissionSupport(Activity _activity, Context _context){
this.activity = _activity;
this.context = _context;
}
//배열로 선언한 권한 중 허용되지 않은 권한 있는지 체크
public boolean checkPermission() {
int result;
permissionList = new ArrayList<>();
for(String pm : permissions){
result = ContextCompat.checkSelfPermission(context, pm);
if(result != PackageManager.PERMISSION_GRANTED){
permissionList.add(pm);
}
}
if(!permissionList.isEmpty()){
return false;
}
return true;
}
//배열로 선언한 권한에 대해 사용자에게 허용 요청
public void requestPermission(){
ActivityCompat.requestPermissions(activity, (String[]) permissionList.toArray(new String[permissionList.size()]), MULTIPLE_PERMISSIONS);
}
//요청한 권한에 대한 결과값 판단 및 처리
public boolean permissionResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
//우선 requestCode가 아까 위에 final로 선언하였던 숫자와 맞는지, 결과값의 길이가 0보다는 큰지 먼저 체크
if(requestCode == MULTIPLE_PERMISSIONS && (grantResults.length >0)) {
for(int i=0; i< grantResults.length; i++){
//grantResults 가 0이면 사용자가 허용한 것 / -1이면 거부한 것
//-1이 있는지 체크하여 하나라도 -1이 나온다면 false를 리턴
if(grantResults[i] == -1){
return false;
}
}
}
return true;
}
}
권한에 대한 요청을 불러올 Activity의 onCreate 부분에 권한에 대한 클래스를 활용할 함수를 만들어줍니다
[ MainActivity.java ]
public class MainActivity extends AppCompatActivity {
// 클래스 선언
private PermissionSupport permission;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
permissionCheck();
}
// 권한 체크
private void permissionCheck() {
// PermissionSupport.java 클래스 객체 생성
permission = new PermissionSupport(this, this);
// 권한 체크 후 리턴이 false로 들어오면
if (!permission.checkPermission()){
//권한 요청
permission.requestPermission();
}
}
// Request Permission에 대한 결과 값 받아와
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//여기서도 리턴이 false로 들어온다면 (사용자가 권한 허용 거부)
if (!permission.permissionResult(requestCode, permissions, grantResults)) {
// 다시 permission 요청
permission.requestPermission();
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
그 후 핸드폰을 실행해주시면 코드를 작성한 Activity 창이 열렸을때 아래 권한 요청 팝업이 뜹니다
거부를 누르게 되면 다시 요청하는 팝업이 뜨면서 아래 '다시 묻지 않음' 체크박스가 생성됩니다
여기서 '다시 묻지 않음' 체크박스 선택 후 거부를 하게되면 팝업창이 다시 뜨지 않으니 권한 허용이 꼭 필요한 기능을 사용시에 핸드폰 - 설정에 들어가 어플을 일일이 찾아주는 일이 없도록 settings.action_application_details_settings 를 통해 설정 - 앱 정보로 들어가 권한을 요청해주면 된다.
반응형
'앱 개발 > Java' 카테고리의 다른 글
[안드로이드] fragment 키보드(키패드) 내리기 (0) | 2022.01.13 |
---|---|
[안드로이드] 레이아웃 배경색 어둡게 (0) | 2022.01.03 |
안드로이드 DB 데이터 csv 파일로 추출 (0) | 2021.12.23 |
자바 16진수 문자 출력할때 ffff 출력 현상 + 쉬프트연산 및 계산 (0) | 2021.12.22 |
자바 비트 연산, 쉬프트 연산자 (0) | 2021.12.22 |