Android Marshmallow의 서비스에서 권한을 요청하는 방법
Android Marshmallow에서 권한은 앱이 설치 될 때 한꺼번에 요청되는 것이 아니라 필요할 때 런타임에 요청되어야합니다. 그러나 내 앱에는 서비스 만 포함되어 있기 때문에 문제가되는 활동에서만 권한을 요청할 수 있습니다. (그 이유는 무엇입니까?이 앱에는 Android Wear 시계 모드가 번들로 포함되어 있으며 휴대 전화가 주변에있는 사진을 검색하여 시계로 보낼 수 있습니다. 활동이 필요하지 않습니다.하지만 위치 권한이 필요합니다.)
그렇다면 서비스에서 권한을 요청하는 방법이 있습니까? 아니면 과거와 같이 설치시 권한을 강제로 부여합니까?
requestPermission()
단지에서 호출 할 수 Activity
아닌 Service
(달리 checkPermission()
그에만 필요 PackageManager
). 따라서이 문제를 해결하려면 추가 작업을 수행해야합니다. Activity
예를 들어 앱에 를 제공해야 하며, 예를 들어 Service
필요한 권한을 확인할 수 있으며 아직 부여되지 않은 경우 알림을 생성 할 수 있으며 사용자에게 그 이유를 설명하는 짧은 메시지로 알릴 수 있습니다. 알림 및 알림을 클릭 할 때 발생해야하는 작업 등
동의합니다. 이것은 서비스에 매우 번거 롭습니다. 이에 대한 문제는 Android 개발자 미리보기 페이지에보고해야한다고 생각합니다.
현재로서는 서비스에 대한 권한을 확인하고 권한이 없을 경우 알림을 표시하는 것이 최선의 해결책이라고 생각합니다. 더 좋은 방법은 사용자가 알림을 누를 때 권한을 요청하는 DialogActivity를 만드는 것입니다.
PermissionEverywhere 라이브러리를 살펴보십시오 . 모든 컨텍스트에서 권한을 요청할 수 있습니다.
클릭하면 권한을 요청하는 활동이 열리는 알림이 생성됩니다.
라이브러리 github 페이지의 샘플 코드 :-
@Override
protected Boolean doInBackground(Void... params) {
PermissionResponse response = PermissionEverywhere.getPermission(getApplicationContext(),
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQ_CODE,
"Notification title",
"This app needs a write permission",
R.mipmap.ic_launcher)
.call();
//waits..
boolean isGranted = response.isGranted();
if(isGranted){ //changed from isGrante to isGranted
// Do stuff
}
}
이것을 정확하게 할 수있는 아주 간단한 라이브러리가 있습니다. 앱이 포 그라운드인지 백그라운드인지에 따라 어디에서나 (서비스에서도) 권한을 확인할 수 있으며, 일반 대화 상자를 표시하거나 권한을 요청하는 알림을 생성합니다. 코드는 정말 이해하기 쉽고 사용하기도 정말 쉽습니다.
시도해보세요 : Android 권한
@SuppressLint("NewApi")
public void checkPerm()
{
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if ( checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ) {
return;
}
locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {....}
}
를 사용 ResultReceiver
하여 사용자 응답의 수신자를 생성 한 다음 알림의를 통해 콜백으로 활동에 전달할 수 PendingIntent
있습니다. 참고
'program story' 카테고리의 다른 글
CORB (Cross-Origin Read Blocking) (0) | 2020.08.24 |
---|---|
0 기반 월 번호 매기기 (0) | 2020.08.24 |
RESTful API의 API 키 vs HTTP 인증 vs OAuth (0) | 2020.08.24 |
새 날짜 시간 API를 사용하여 날짜 형식 지정 (0) | 2020.08.23 |
UIImage에서 기본 NSData 가져 오기 (0) | 2020.08.23 |