项目地图使用的arcgis,所以用到百度的只是GPS定位
百度GPS定位需要申请个开发者账户,官网下载API,引入jar和so文件,如何引入参考前面的as配置说明,百度的定位在Genymotion没试出,Genymotion也启用了GPS,但还是得不到地址,网上看有人通过,自己没试出来,还是通过真机测试的
开发步骤:
1.jar包和.so文件引入
2.AndroidManifest.xml权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- baidu lbs -->
<!-- 这个权限用于进行网络定位-->
<!--<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>
<!--允许应用读取低级别的系统日志文件 -->
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
3.
<application
android:name="com.sxu.platform.myapp.web.LocationApplication"
4.
LocationApplication代码
package com.sxu.platform.myapp.web;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.GeofenceClient;
import com.baidu.location.LocationClient;
import com.sxu.platform.myapp.utils.ImageCacheUtil;
import android.app.Application;
import android.app.Service;
import android.os.Vibrator;
import android.util.Log;
import android.widget.TextView;
/**
* ��Application
*/
public class LocationApplication extends Application {
public LocationClient mLocationClient;
public GeofenceClient mGeofenceClient;
public MyLocationListener mMyLocationListener;
public TextView mLocationResult,logMsg;
public TextView mLocationGps;
public TextView mLocationGpsTime;
public TextView mLocationGpsAddr;
public TextView trigger,exit;
public Vibrator mVibrator;
// static {
// System.loadLibrary("liblocSDK5"); //加载.so文件
// }
@Override
public void onCreate() {
super.onCreate();
mLocationClient = new LocationClient(this.getApplicationContext());
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
mGeofenceClient = new GeofenceClient(getApplicationContext());
mVibrator =(Vibrator)getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE);
}
/**
* ʵ��ʵλ�ص�����
*/
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
//Receive Location
System.out.println("====================BDLocation======================");
StringBuffer sb = new StringBuffer(256);
sb.append("时间 : ");
sb.append(location.getTime());
// sb.append("\nerror code : ");
// sb.append(location.getLocType());
sb.append("\n经度 : ");
sb.append(location.getLatitude());
sb.append(" 纬度 : ");
sb.append(location.getLongitude());
//半径
// sb.append("\nradius : ");
// sb.append(location.getRadius());
mLocationGpsTime.setText("时间 : "+location.getTime());
mLocationGps.setText("经度 : "+location.getLongitude()+" 纬度 : "+location.getLatitude());
if (location.getLocType() == BDLocation.TypeGpsLocation){
//速率
// sb.append("\nspeed : ");
// sb.append(location.getSpeed());
// //卫星编号
// sb.append("\nsatellite : ");
// sb.append(location.getSatelliteNumber());
// //方向
// sb.append("\ndirection : ");
sb.append("\n位置 : ");
sb.append(location.getAddrStr());
// sb.append(location.getDirection());
mLocationGpsAddr.setText("位置 : "+location.getAddrStr());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
sb.append("\n位置 : ");
sb.append(location.getAddrStr());
mLocationGpsAddr.setText("位置 : "+location.getAddrStr());
//运营商信息
// sb.append("\noperationers : ");
// sb.append(location.getOperators());
}
logMsg(sb.toString());
Log.i("BaiduLocationApiDem", sb.toString());
}
}
/**
* ��ʾ�����ַ�
* @param str
*/
public void logMsg(String str) {
try {
if (mLocationResult != null)
mLocationResult.setText(str);
} catch (Exception e) {
e.printStackTrace();
}
}
public void gpsMsg(String str) {
try {
if (mLocationResult != null)
mLocationResult.setText(str);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* �߾��ȵ���Χ���ص�
* @author yyy
*
*/
}
5.测试代码
mLocationClient = ((LocationApplication) ct.getApplicationContext()).mLocationClient; // 声明LocationClient类
TextView gps = (TextView)view.findViewById(R.id.gps);
TextView gpstime = (TextView)view.findViewById(R.id.gpstime);
TextView gpsaddr = (TextView)view.findViewById(R.id.gpsaddr);
((LocationApplication)ct.getApplicationContext()).mLocationGps = gps;
((LocationApplication)ct.getApplicationContext()).mLocationGpsTime = gpstime;
((LocationApplication)ct.getApplicationContext()).mLocationGpsAddr = gpsaddr;
System.out.println("======================百度GPS=========================");
setLocationOption();//设置参数
mLocationClient.start();// 开始定位
退出时线程关掉