搜索
热搜: 活动 交友 discuz
查看: 31056|回复: 0
打印 上一主题 下一主题

百度地图API解决 android 6.0定位不了的问题

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2016-7-20 14:46:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原文得治:http://blog.csdn.net/qq_25817651/article/details/50913055


在于android 6.0采用了运行时权限(android-RuntimePermissions),6.0的权限一般分为两种,一种时普通权限,如下图:其他的为运行时权限



在百度地图API中,用到的权限主要有以下几个


  1. <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
  2. <!-- 这个权限用于进行网络定位 -->
  3. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  4. <!-- 这个权限用于访问GPS定位 -->
  5. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  6. <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
  7. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  8. <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
  9. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  10. <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  11. <!-- 用于读取手机当前的状态 -->
  12. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  13. <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
  14. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  15. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  16. <!-- 访问网络,网络定位需要上网 -->
  17. <uses-permission android:name="android.permission.INTERNET" />
复制代码
其中:
  1. Manifest.permission.ACCESS_COARSE_LOCATION,
  2.         Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_PHONE_STATE
复制代码

这几个为运行时权限,需要在运行时得到用户的授权。

在Activity中进行授权如下:判断用户的Android版本,如果为23(6.0),执行showcontacts,提醒用户授权


  1. if (Build.VERSION.SDK_INT>=23){
  2.     showContacts(mMapView);
  3. }else{
  4.     init();
  5. }
复制代码

判断用户是否已经授权,如果已经授权,直接开始定位,如果没有授权,


  1. requestContactsPermissions(v);
复制代码

提示用户进行授权


  1. public void showContacts(View v) {
  2.     Log.i(TAG, "Show contacts button pressed. Checking permissions.");

  3.     // Verify that all required contact permissions have been granted.
  4.     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
  5.             != PackageManager.PERMISSION_GRANTED
  6.             || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
  7.             != PackageManager.PERMISSION_GRANTED
  8.             || ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
  9.             != PackageManager.PERMISSION_GRANTED
  10.             || ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
  11.             != PackageManager.PERMISSION_GRANTED) {
  12.         // Contacts permissions have not been granted.
  13.         Log.i(TAG, "Contact permissions has NOT been granted. Requesting permissions.");
  14.         requestContactsPermissions(v);

  15.     } else {

  16.         // Contact permissions have been granted. Show the contacts fragment.
  17.         Log.i(TAG,
  18.                 "Contact permissions have already been granted. Displaying contact details.");
  19.        init();
  20.     }
  21. }


  22. private void requestContactsPermissions(View v) {
  23.     // BEGIN_INCLUDE(contacts_permission_request)
  24.     if (ActivityCompat.shouldShowRequestPermissionRationale(this,
  25.             Manifest.permission.ACCESS_COARSE_LOCATION)
  26.             || ActivityCompat.shouldShowRequestPermissionRationale(this,
  27.             Manifest.permission.ACCESS_FINE_LOCATION)
  28.             || ActivityCompat.shouldShowRequestPermissionRationale(this,
  29.             Manifest.permission.WRITE_EXTERNAL_STORAGE)
  30.             || ActivityCompat.shouldShowRequestPermissionRationale(this,
  31.             Manifest.permission.READ_PHONE_STATE)
  32.             ) {

  33.         // Provide an additional rationale to the user if the permission was not granted
  34.         // and the user would benefit from additional context for the use of the permission.
  35.         // For example, if the request has been denied previously.
  36.         Log.i(TAG,
  37.                 "Displaying contacts permission rationale to provide additional context.");

  38.         // Display a SnackBar with an explanation and a button to trigger the request.
  39.         Snackbar.make(v, "permission_contacts_rationale",
  40.                 Snackbar.LENGTH_INDEFINITE)
  41.                 .setAction("ok", new View.OnClickListener() {
  42.                     @Override
  43.                     public void onClick(View view) {
  44.                         ActivityCompat
  45.                                 .requestPermissions(MainActivity.this, PERMISSIONS_CONTACT,
  46.                                         REQUEST_CONTACTS);
  47.                     }
  48.                 })
  49.                 .show();
  50.     } else {
  51.         // Contact permissions have not been granted yet. Request them directly.
  52.         ActivityCompat.requestPermissions(this, PERMISSIONS_CONTACT, REQUEST_CONTACTS);
  53.     }
  54.     // END_INCLUDE(contacts_permission_request)
  55. }


  56. 最后,对授权的结果进行判定:
  57. @Override
  58. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

  59.     if (requestCode==REQUEST_CONTACTS){
  60.         if (PermissionUtil.verifyPermissions(grantResults)) {

  61.            init();

  62.         } else {


  63.         }


  64.     }else{
  65.         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  66.     }
  67. }
  68. 其中 permissonutil代码如下
  69. /**
  70. * Utility class that wraps access to the runtime permissions API in M and provides basic helper
  71. * methods.
  72. */
  73. public abstract class PermissionUtil {

  74.     /**
  75.      * Check that all given permissions have been granted by verifying that each entry in the
  76.      * given array is of the value {@link PackageManager#PERMISSION_GRANTED}.
  77.      *
  78.      * @see Activity#onRequestPermissionsResult(int, String[], int[])
  79.      */
  80.     public static boolean verifyPermissions(int[] grantResults) {
  81.         // At least one result must be checked.
  82.         if(grantResults.length < 1){
  83.             return false;
  84.         }

  85.         // Verify that each required permission has been granted, otherwise return false.
  86.         for (int result : grantResults) {
  87.             if (result != PackageManager.PERMISSION_GRANTED) {
  88.                 return false;
  89.             }
  90.         }
  91.         return true;
  92.     }

  93. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-18 22:53 , Processed in 0.064995 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表