国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 6.0動態權限及跳轉GPS設置界面的方法

2019-12-12 00:38:49
字體:
來源:轉載
供稿:網友

1.動態權限申請

模糊的位置信息android.permission.ACCESS_COARSE_LOCATION權限為例

在AndroidManifest文件中加入權限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

然后java代碼中動態申請

//動態申請權限的測試方法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()為你自己需要權限才能執行的方法

然后重寫申請權限的回掉方法

@Overridepublic 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">當前應用缺少必要權限。/n/n請點擊/"設置/"-/"權限/"-打開所需權限。</string><string name="gpsNotifyMsg">當前應用需要打開定位功能。/n/n請點擊/"設置/"-/"定位服務/"-打開定位功能。</string><string name="setting">設置</string><string name="cancel">取消</string>

java代碼

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(); }}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == GPS_REQUEST_CODE) {  //做需要做的事情,比如再次檢測是否打開GPS了 或者定位  openGPSSettings(); }}

最后在需要的地方調用 openGPSSettings()方法。

效果(是在相關權限是已經申請好的情況下的效果)

3.下面是我在高德地圖Demo中看見的檢測權限的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);  } }}

繼承于CheckPermissionsActivity即可

不允許就跳轉系統設置界面,若沒設置再次檢測權限并申請,直到允許為止。可和GPS設置搭配使用

以上這篇Android 6.0動態權限及跳轉GPS設置界面的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 敖汉旗| 武城县| 卢氏县| 铜梁县| 始兴县| 上林县| 德格县| 龙口市| 贵南县| 高陵县| 宁波市| 贵定县| 大安市| 云龙县| 信阳市| 合水县| 乌拉特后旗| 陕西省| 永德县| 海原县| 乌海市| 嘉荫县| 阜宁县| 乐亭县| 新乐市| 阳山县| 长乐市| 和林格尔县| 济宁市| 松原市| 合阳县| 康保县| 渝中区| 奈曼旗| 罗源县| 开封县| 通许县| 平乡县| 西昌市| 原平市| 衡阳县|