Android 6.0 동적 권한 및 GPS 설정 인터페이스 전환 방법

8946 단어 Android6.0권한GPS
1.동적 권한 신청
모호 한 위치 정보 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 설정 인터페이스 를 뛰 어 넘 는 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 할 수 있 고 여러분 들 이 저 희 를 많이 사랑 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기