Android中百度地图开发细节综述

此相关细节以Android Studio为开发工具

1.创建百度地图可用KEY,关键之创建SHA1:

新手推荐先下载官方Demo,导入项目,Android Studio导入BaiduMapsApiASDemo,运行起来会报key错误,这里需要你去申请key。

Demo的APP根目录有debug.keystore,也可以使用自己的。

创建方法:

1)点开Android Studio的Terminal

2)找到jdk中keytool.exe(不要找错了,非jre中)

3)在Terminal中定位到keytool.exe文件位置,输入执行命令:

定位到keytool.exe文件

D:\GithubWorkSpace\BaiduMapsApiASDemo>cd D:\SoftWork\Java\jdk1.8.0\bin

输入指令生成sha1等相关参数:

D:\SoftWork\Java\jdk1.8.0\bin>keytool -v -list -keystore D:\GithubWorkSpace\BaiduMapsApiASDemo\app\debug.keystore

最终生成如下:

红框内容就是生成百度地图开发key的关键元素SHA1,复制粘贴过去,继续填完其他元素即可生成你自己的KEY。

 

2.关于参照Demo开发定位,为什么Demo上可以快速定位,自己新建就不可以,网上推荐的方法基本都是添加Service,这个治标不治本。

大部分原因是因为Demo是以targetSdkVersion 22编译的,这是android 5.1的,这个版本在配置文件中写定位权限就可以了;而现在的开发,

只要不是那种万年不变的老古董式开发基本都更新升级了编译SDK,那么新建项目基本上很少有低于sdk 23(android 6.0)的,问题就出在

这里,你把Demo内容完全Copy过来也不能定位,那是因为自Android 6.0起进行了权限分类与升级管理,定位权限还需要单独申请,申请

成功了你会发现立马定位成功,哈哈。

这里推荐一个简单的权限申请jar:

compile 'pub.devrel:easypermissions:1.0.0'

具体代码:
  1 public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {
  2 
  3 
  4     // 定位相关
  5     LocationClient mLocClient;
  6     public MyLocationListenner myListener = new MyLocationListenner();
  7     private TextView mCity;
  8     public static final int REQUEST_GPS = 111;
  9   
 10 
 11     @Override
 12     public void onCreate(Bundle savedInstanceState) {
 13         super.onCreate(savedInstanceState);
 14         setContentView(R.layout.activity_main);
 15 
 16         gpsTask();
 17         
 18         mCity = (TextView) findViewById(R.id.text_city);
 19        
 20     }
 21 
 22 
 23     @AfterPermissionGranted(REQUEST_GPS)
 24     public void gpsTask() {
 25         if (EasyPermissions.hasPermissions(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
 26             myLocalAddress();
 27         } else {
 28             // Ask for one permission
 29             EasyPermissions.requestPermissions(this, "需要请求定位权限",
 30                     REQUEST_GPS, Manifest.permission.ACCESS_FINE_LOCATION);
 31         }
 32     }
 33 
 34     private void myLocalAddress() {
 35         // 定位初始化
 36         mLocClient = new LocationClient(this);
 37         mLocClient.registerLocationListener(myListener);
 38         LocationClientOption option = new LocationClientOption();
 39         option.setOpenGps(true); // 打开gps
 40         option.setCoorType("bd09ll"); // 设置坐标类型
 41         option.setScanSpan(1000);
 42         option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
 43         mLocClient.setLocOption(option);
 44         mLocClient.start();
 45     }
 46 
 47     
 48     @Override
 49     public void onPermissionsGranted(int requestCode, List<String> perms) {
 50 
 51     }
 52 
 53     @Override
 54     public void onPermissionsDenied(int requestCode, List<String> perms) {
 55         if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
 56             new AppSettingsDialog.Builder(this).build().show();
 57         }
 58     }
 59 
 60     @Override
 61     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 62         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 63         EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
 64     }
 65 
 66     /**
 67      * 定位SDK监听函数
 68      */
 69     public class MyLocationListenner implements BDLocationListener {
 70 
 71         @Override
 72         public void onReceiveLocation(BDLocation location) {
 73             // map view 销毁后不在处理新接收的位置
 74             if (location == null) {
 75                 return;
 76             }
 77 
 78             mCity.setText(location.getCity());
 79 
 80         }
 81 
 82         public void onReceivePoi(BDLocation poiLocation) {
 83         }
 84     }
 85 
 86     @Override
 87     protected void onPause() {
 88 
 89         super.onPause();
 90     }
 91 
 92     @Override
 93     protected void onResume() {
 94         super.onResume();
 95     }
 96 
 97     @Override
 98     protected void onStop() {
 99         super.onStop();
100     }
101 
102     @Override
103     protected void onDestroy() {
104         // 退出时销毁定位
105         mLocClient.stop();
106         super.onDestroy();
107     }
108 }

 

posted @ 2018-01-18 11:10  种花小哥  阅读(191)  评论(0编辑  收藏  举报