练习

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.androidbaidumap"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="14"
 9         android:targetSdkVersion="20" />
10 
11     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
12     <uses-permission android:name="android.permission.USE_CREDENTIALS" />
13     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
14     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
15     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
16     <uses-permission android:name="android.permission.INTERNET" />
17     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
18     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
19     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
20     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
21     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
22     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
23     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
24     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
25     
26 
27     <application
28         android:allowBackup="true"
29         android:icon="@drawable/ic_launcher"
30         android:label="@string/app_name"
31         android:theme="@style/AppTheme" >
32         <meta-data
33             android:name="com.baidu.lbsapi.API_KEY"
34             android:value="***********" />
35 
36         <activity
37             android:name=".MainActivity"
38             android:label="@string/app_name" >
39             <intent-filter>
40                 <action android:name="android.intent.action.MAIN" />
41 
42                 <category android:name="android.intent.category.LAUNCHER" />
43             </intent-filter>
44         </activity>
45     </application>
46 
47 </manifest>
  1 package com.example.androidbaidumap;
  2 
  3 import java.util.List;
  4 
  5 import com.baidu.mapapi.SDKInitializer;
  6 import com.baidu.mapapi.map.BaiduMap;
  7 import com.baidu.mapapi.map.MapStatusUpdate;
  8 import com.baidu.mapapi.map.MapStatusUpdateFactory;
  9 import com.baidu.mapapi.map.MapView;
 10 import com.baidu.mapapi.map.MyLocationData;
 11 import com.baidu.mapapi.model.LatLng;
 12 
 13 import android.app.Activity;
 14 import android.content.Context;
 15 import android.location.Location;
 16 import android.location.LocationListener;
 17 import android.location.LocationManager;
 18 import android.os.Bundle;
 19 import android.util.Log;
 20 import android.widget.Toast;
 21 
 22 public class MainActivity extends Activity {
 23     private MapView mapView;
 24     //总控制器
 25     private BaiduMap baiduMap;
 26     //位置管理器
 27     private LocationManager locationManager;
 28     //位置提供器
 29     private String provider;
 30     //标志符
 31     private boolean isFirstLocate=true;
 32     @Override
 33     protected void onCreate(Bundle savedInstanceState) {
 34         super.onCreate(savedInstanceState);
 35         SDKInitializer.initialize(getApplicationContext());
 36         setContentView(R.layout.activity_main);
 37         mapView=(MapView)findViewById(R.id.map_view);
 38         baiduMap=mapView.getMap();
 39         //开启显示个人位置功能
 40         baiduMap.setMyLocationEnabled(true);
 41         locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
 42         //获取所有的位置提供器
 43         List<String> list=locationManager.getProviders(true);
 44         if(list.contains(LocationManager.GPS_PROVIDER)){
 45             provider=LocationManager.GPS_PROVIDER;
 46         }else if(list.contains(LocationManager.NETWORK_PROVIDER)){
 47             provider=LocationManager.NETWORK_PROVIDER;
 48         }else{
 49             //提示用户无可用的
 50             Toast.makeText(this, "没用可用的定位设置,请确定你已经开启GPS或网络", Toast.LENGTH_SHORT).show();
 51             return;
 52         }
 53         Location location=locationManager.getLastKnownLocation(provider);
 54         if(location!=null){
 55             showLocation(location);
 56         }
 57         locationManager.requestLocationUpdates(provider, 6000, 1, locationListener);
 58         
 59     }
 60     private void showLocation(Location location) {
 61         if(isFirstLocate){
 62             LatLng ll=new LatLng(location.getLatitude(), location.getLongitude());
 63             //获取MapStatusUpdate对象
 64             //封装地理位置
 65             MapStatusUpdate update=MapStatusUpdateFactory.newLatLng(ll);
 66             baiduMap.animateMapStatus(update);
 67             //设置精度
 68             update=MapStatusUpdateFactory.zoomTo(16f);
 69             baiduMap.animateMapStatus(update);
 70             isFirstLocate=false;
 71             
 72         }
 73         //封装个人所在位置
 74         MyLocationData.Builder locationBuilder=new MyLocationData.Builder();
 75         locationBuilder.latitude(location.getLatitude());
 76         locationBuilder.longitude(location.getLongitude());
 77         MyLocationData locationData=locationBuilder.build();
 78         baiduMap.setMyLocationData(locationData);
 79         
 80     }
 81     private LocationListener locationListener=new LocationListener(){
 82 
 83         @Override
 84         public void onLocationChanged(Location location) {
 85             // TODO Auto-generated method stub
 86             if(location!=null){
 87                 showLocation(location);
 88                 Log.i("baidumap", "update");
 89             }
 90         }
 91 
 92         @Override
 93         public void onStatusChanged(String provider, int status, Bundle extras) {
 94             // TODO Auto-generated method stub
 95             
 96         }
 97 
 98         @Override
 99         public void onProviderEnabled(String provider) {
100             // TODO Auto-generated method stub
101             
102         }
103 
104         @Override
105         public void onProviderDisabled(String provider) {
106             // TODO Auto-generated method stub
107             
108         }};
109     @Override
110     protected void onDestroy() {
111         // TODO Auto-generated method stub
112         super.onDestroy();
113         baiduMap.setMyLocationEnabled(false);
114         mapView.onDestroy();
115         if(locationManager!=null){
116             locationManager.removeUpdates(locationListener);
117         }
118     }
119     @Override
120     protected void onPause() {
121         // TODO Auto-generated method stub
122         super.onPause();
123         mapView.onPause();
124     }
125     @Override
126     protected void onResume() {
127         // TODO Auto-generated method stub
128         super.onResume();
129         mapView.onResume();
130     }
131 
132 }
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

相关下载里下载最新的库文件。将so文件的压缩文件解压出来,把对应架构下的so文件放入开发者自己APP的对应架构下的文件夹中(建议全部放入以提高程序兼容性),将locSDK_6.X.jar文件拷贝到工程的libs目录下,这样您就可以在程序中使用百度定位SDK了。

使用eclipse开发的开发者,只需要将SO的文件夹放到libs下即可;使用AndroidStutio的开发者除了上述操作,还需要在build.gradle中配置SO的使用,如下所示:

sourceSets {
        	main {
    			jniLibs.srcDirs = ['libs']
        	}
}

开发者如果开发的是系统应用,则只在工程中配置SO还是不够的,还需要手动把对应架构的SO拷贝到/system/lib下,如果是64位系统的话需要将64位的SO拷贝到/sytem/lib64下。

注意:每次新版本的定位SDK,开发者除了要更新JAR包之外,也要注意一下SO有无更新,如果SO名称不一样了,也要及时替换老的SO版本,不然会导致定位失败!

设置AndroidManifest.xml

在application标签中声明service组件,每个app拥有自己单独的定位service

<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>

【重要提醒】

定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。 <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>

声明使用权限

<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

设置AcessKey

SDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。

设置AccessKey,在application标签中加入

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="key" />       //key:开发者申请的key

import相关类

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类
import com.baidu.location.Poi;


原文地址:https://www.cnblogs.com/oldcownotGiveup/p/5425500.html