Android Studio 百度地图开发(二)GPS定位
来源:互联网 发布:培训机构推荐就业 知乎 编辑:程序博客网 时间:2024/06/07 05:27
Overview
在Android Studio 同时引入百度定位SDK和百度地图SDK后,会出现gradle预编译出错的问题
Error:Execution failed for task ':app:dexDebug'.> com.android.ide.common.internal.LoggedErrorException: Failed to run command: /Users/alex/android-sdk/build-tools/21.1.2/dx --dex --output /Users/alex/CodeHub/GitHub/BaiduLoction/app/build/intermediates/dex/debug --input-list=/Users/alex/CodeHub/GitHub/BaiduLoction/app/build/intermediates/tmp/dex/debug/inputList.txt Error Code: 2 Output: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lcom/baidu/lbsapi/auth/ErrorMessage; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) at com.android.dx.command.dexer.Main.run(Main.java:246) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106)
查看log,是由于两个SDK中的有重合申明 Multiple dex files define Lcom/baidu/lbsapi/auth/ErrorMessage
Eclipse中的项目能正常编译
若有人知道如何规避此问题,请告知!万谢
因此,关于GPS定位,将分两个方法来实现
- 使用百度定位SDK,获取定位信息
- 通过LocationManager,获取定位信息
通过百度定位SDK,获取定位信息
- 获取百度定位SDK
设置权限与Service
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><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" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission><uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
代码实现
申明locationClient并注册监听locationClient = new LocationClient(getApplicationContext());locationClient.registerLocationListener(bdLocationListener);locationClient.start();
实现监听
public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null) return ; StringBuffer sb = new StringBuffer(256); sb.append("time : "); sb.append(location.getTime()); sb.append("\nerror code : "); sb.append(location.getLocType()); sb.append("\nlatitude : "); sb.append(location.getLatitude()); sb.append("\nlontitude : "); sb.append(location.getLongitude()); sb.append("\nradius : "); sb.append(location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation){ sb.append("\nspeed : "); sb.append(location.getSpeed()); sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){ sb.append("\naddr : "); sb.append(location.getAddrStr()); } Log.d("location","location\t"+sb); }};
获取结果
D/location( 8112): location time : 2015-03-04 00:10:03D/location( 8112): error code : 161D/location( 8112): latitude : 22.644645D/location( 8112): lontitude : 113.918146D/location( 8112): radius : 62.164772D/location( 8112): addr : null
通过LocationManager获取定位信息
创建Service用于实时监听GPS变化
public class GPSSever extends Service implements LocationListener{private final static String TAG = "GPSServer";private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1; //根据移动的最小距离更新private static final long MIN_TIME_BW_UPDATES = 1000 * 10 * 1; //根据间隔的最小时间更新private Context mContext;private LocationManager mLocationManager;private boolean isGPSEnable = false;private boolean isNetworkEnable = false;private boolean canGetLocation = false;private Location mLocation;private GPSListener listener;public interface GPSListener{ public void onGPS(Location location);}public GPSSever(Context context) { this.mContext = context; getLocation();}protected void getLocation(){ mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); isGPSEnable = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); isNetworkEnable = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!isGPSEnable && !isNetworkEnable){ //无法进行定位 Log.d(TAG,"无法定位"); }else { canGetLocation = true; //首先使用网络定位获取location if (isNetworkEnable){ Log.d(TAG,"Network enable"); mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); mLocation = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); postLocation(mLocation); } if (isGPSEnable){ Log.d(TAG,"GPS enable"); if (mLocation == null){ mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); mLocation = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); postLocation(mLocation); } } }}public void stopUsingGPS(){ if (mLocationManager != null){ mLocationManager.removeUpdates(this); }}private void postLocation(Location location){ if (listener != null){ listener.onGPS(location); }}public boolean isCanGetLocation() { return canGetLocation;}public Location getCurrentLocation() { if (mLocation != null){ return mLocation; } return null;}public GPSListener getListener() { return listener;}public void setListener(GPSListener listener) { this.listener = listener;}@Overridepublic void onLocationChanged(Location location) { Log.d(TAG,"onLocationChanged\n 经度:"+location.getLongitude()+"\t 纬度:"+location.getLatitude()); mLocation = location; postLocation(location);}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) { Log.d(TAG,"onStatusChanged\n provider:"+provider+"\t status:"+status);}@Overridepublic void onProviderEnabled(String provider) { Log.d(TAG,"onProviderEnabled\n provider:"+provider);}@Overridepublic void onProviderDisabled(String provider) { Log.d(TAG,"onProviderDisabled\n provider:"+provider);}@Overridepublic IBinder onBind(Intent intent) { return null;}}
- GPSService使用方法
gpsSever = new GPSSever(MainActivity.this);
gpsSever.setListener(this); 结果回调
@Overridepublic void onGPS(Location location) { try { List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 5); for (Address a: addresses){ Log.d(TAG,a.toString()); } MyLocationData locData = new MyLocationData.Builder() .accuracy(300) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); baiduMap.setMyLocationData(locData); } catch (IOException e) { e.printStackTrace(); }}
运行结果
D/GPSServer(11503): Network enableD/GPSServer(11503): GPS enableD/GPSServer(11503): onLocationChangedD/GPSServer(11503): 经度:113.913608 纬度:22.647471
0 0
- Android Studio 百度地图开发(二)GPS定位
- Android百度地图开发(二)-定位
- Android studio 百度地图开发(2)地图定位
- android 百度地图GPS定位
- Android百度地图开发(二)定位之手动定位
- Android 开发百度地图之二定位
- Android studio百度地图定位和地图开发
- Android之百度地图GPS定位
- 百度地图定位-android studio
- Android Studio地图开发(百度地图)
- android百度地图(二)之定位
- Android Studio地图开发之根据地点查找、定位(百度地图API)
- [Android百度地图SDK开发] (二)地图交互之定位
- Android Studio百度地图(二)
- Android之百度地图(二)基础地图和定位
- Android 百度地图开发之地图定位
- Android Studio 百度地图开发
- Android Studio百度地图开发
- 常用 CSS 中文字体 Unicode 编码表
- chrome浏览器开发者工具的使用以及调试js
- 软件项目需求开发过程实践之业务建模用例图
- JavaScript ==和=== 的不同之处
- Mysql字符集
- Android Studio 百度地图开发(二)GPS定位
- 简单的TCP通信
- sql语句 unit all和unit
- 面向对象--this、static、封装
- SD卡的读与写
- Comparing Excel Online, Excel Services, and Excel Web App
- 整合Kafka到Spark Streaming——代码示例和挑战
- mysql常用语句
- Oracle10g数据类型总结