Android 6.0 동적 권한 및 GPS 설정 인터페이스 전환 방법
모호 한 위치 정보 android.permission.ACCESSCOARSE_LOCATION 권한 의 예
AndroidManifest 파일 에 권한 추가
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
그리고 자바 코드 에서 동적 신청
//
public void test() {
//
String[] permissions = {Manifest.permission.ACCESS_COARSE_LOCATION};
if (Build.VERSION.SDK_INT >= 23) {
// 6.0 ,
// , for
int check = ContextCompat.checkSelfPermission(this,permissions[0]);
// GRANTED--- DINIED---
if (check == PackageManager.PERMISSION_GRANTED) {
//
run();
} else {
// ( ) 1 final
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
} else {
//
run();
}
}
그 중에서 run()은 권한 이 필요 해서 실행 할 수 있 는 방법 입 니 다.그리고 신청 권한 의 반환 방법 을 다시 씁 니 다.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// , 。
// , for
if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//
run();
} else {
// , , app
Toast.makeText(this," XXX ",Toast.LENGTH_SHORT).show();
}
}
2.GPS 점프 설정 인터페이스관련 문자열
<string name="notifyTitle"> </string>
<string name="notifyMsg"> 。
\" \"-\" \"- 。</string>
<string name="gpsNotifyMsg"> 。
\" \"-\" \"- 。</string>
<string name="setting"> </string>
<string name="cancel"> </string>
자바 코드
private int GPS_REQUEST_CODE = 10;
/**
* GPS
*
* @return
*/
private boolean checkGPSIsOpen() {
boolean isOpen;
LocationManager locationManager = (LocationManager) this
.getSystemService(Context.LOCATION_SERVICE);
isOpen = locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER);
return isOpen;
}
/**
* GPS
*/
private void openGPSSettings() {
if (checkGPSIsOpen()) {
initLocation(); //
} else {
//
new AlertDialog.Builder(this)
.setTitle(R.string.notifyTitle)
.setMessage(R.string.gpsNotifyMsg)
// ,
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setPositiveButton(R.string.setting,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// GPS
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, GPS_REQUEST_CODE);
}
})
.setCancelable(false)
.show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == GPS_REQUEST_CODE) {
// , GPS
openGPSSettings();
}
}
마지막 으로 필요 한 곳 에서 openGPSSettings()방법 을 호출 합 니 다.효과
3.다음은 제 가 고 덕 지도 데모 에서 본 검 측 권한 의 Activity 입 니 다.
public class CheckPermissionsActivity extends Activity implements
ActivityCompat.OnRequestPermissionsResultCallback {
/**
*
*/
protected String[] needPermissions = {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE
};
private static final int PERMISSON_REQUESTCODE = 0;
private static final int SETTING_REQUESTCODE = 1;
/**
* ,
*/
private boolean isNeedCheck = true;
@Override
protected void onResume() {
super.onResume();
if (isNeedCheck) {
checkPermissions(needPermissions);
}
}
/**
* @param permissions
* @since 2.5.0
*/
private void checkPermissions(String... permissions) {
List<String> needRequestPermissonList = findDeniedPermissions(permissions);
if (null != needRequestPermissonList
&& needRequestPermissonList.size() > 0) {
ActivityCompat.requestPermissions(this,
needRequestPermissonList.toArray(
new String[needRequestPermissonList.size()]),
PERMISSON_REQUESTCODE);
}
}
/**
*
*
* @param permissions
* @return
* @since 2.5.0
*/
private List<String> findDeniedPermissions(String[] permissions) {
List<String> needRequestPermissonList = new ArrayList<String>();
for (String perm : permissions) {
if (ContextCompat.checkSelfPermission(this,
perm) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.shouldShowRequestPermissionRationale(
this, perm)) {
needRequestPermissonList.add(perm);
}
}
return needRequestPermissonList;
}
/**
*
*
* @param grantResults
* @return
* @since 2.5.0
*/
private boolean verifyPermissions(int[] grantResults) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] paramArrayOfInt) {
if (requestCode == PERMISSON_REQUESTCODE) {
if (!verifyPermissions(paramArrayOfInt)) {
showMissingPermissionDialog();
isNeedCheck = false;
}
}
}
/**
*
*
* @since 2.5.0
*/
private void showMissingPermissionDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.notifyTitle);
builder.setMessage(R.string.notifyMsg);
// ,
builder.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.setPositiveButton(R.string.setting,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startAppSettings();
}
});
builder.setCancelable(false);
builder.show();
}
/**
*
*
* @since 2.5.0
*/
private void startAppSettings() {
Intent intent = new Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, SETTING_REQUESTCODE);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SETTING_REQUESTCODE) {
checkPermissions(needPermissions);
}
}
}
CheckPermissions Activity 에 계승 하면 됩 니 다.허용 되 지 않 으 면 시스템 설정 인터페이스 입 니 다.재 검 측 권한 을 설정 하지 않 고 허용 할 때 까지 신청 합 니 다.GPS 설정 과 함께 사용 가능
이상 의 안 드 로 이 드 6.0 동적 권한 과 GPS 설정 인터페이스 를 뛰 어 넘 는 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 할 수 있 고 여러분 들 이 저 희 를 많이 사랑 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.