1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android百度地图调用和GPS定位

Android百度地图调用和GPS定位

时间:2019-07-01 17:17:59

相关推荐

Android百度地图调用和GPS定位

1、声明权限内容

其中的百度地图的key需要在百度地图的开发者上申请

申请key需要用到包名和SHA1

Window→preference→Android→Build中有

package="包名"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="19"android:targetSdkVersion="21" /><!-- 获取设备网络状态,禁用后无法获取网络状态 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 网络权限,当禁用后,无法进行检索等相关业务 --><uses-permission android:name="android.permission.INTERNET" /><!-- 读取设备硬件信息,统计数据 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!-- 读取系统信息,包含系统版本等信息,用作统计 --><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><!-- 获取设备的网络状态,鉴权所需网络代理 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!-- 允许sd卡写权限,需写入地图数据,禁用后无法显示地图 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 获取统计数据 --><uses-permission android:name="android.permission.WRITE_SETTINGS" /><!-- 鉴权所需该权限获取进程列表 --><uses-permission android:name="android.permission.GET_TASKS" /><application android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><!-- 百度地图的key --><meta-data android:name="com.baidu.lbsapi.API_KEY"android:value="5Qnu8ADVqkw4KXdbdMK9vgxSqsuaFTKm" /><activity android:name=".LoginActivity"android:label="@string/app_name"android:launchMode="singleTask" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".MainActivity"android:icon="@null"android:label="@string/back"android:launchMode="singleTask" ></activity><activity android:name="driver.LoginDriver"android:label="@string/title_activity_login_driver"android:launchMode="singleTask" ></activity><activity android:name="customer.LoginCustomer"android:launchMode="singleTask" ></activity><activity android:name="customer.CustomerMenu"android:label="@string/title_activity_customer_menu" ></activity><activity android:name="driver.DriverMenu" ></activity></application>

下面是xml布局文件中的代其中内容可进行改动

<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FDF5E6"tools:context="customer.CustomerMenu" ><LinearLayoutandroid:id="@+id/b_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><ImageButtonandroid:id="@+id/customer_menu"android:layout_width="20dp"android:layout_height="25dp"android:layout_marginLeft="5dp"android:layout_marginTop="5dp"android:background="@drawable/customer"android:src="@drawable/transparent_mask" /></LinearLayout><ScrollViewandroid:id="@+id/a_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/b_layout"android:background="#FDF5E6" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="7dp"android:layout_marginTop="7dp"android:orientation="horizontal" ><TextViewstyle="@style/customer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="快车" /><TextViewstyle="@style/customer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="出租车" /><TextViewstyle="@style/customer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="专车" /><TextViewstyle="@style/customer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="顺风车" /></LinearLayout></ScrollView><com.baidu.mapapi.map.TextureMapViewandroid:id="@+id/mTexturemap"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/a_layout" ></com.baidu.mapapi.map.TextureMapView><ImageButtonandroid:id="@+id/ib_small"android:layout_width="40dp"android:layout_height="40dp"android:layout_alignParentRight="true"android:layout_below="@id/ib_large"android:layout_marginRight="10dp"android:layout_marginTop="10dp"android:background="@drawable/small"android:src="@drawable/transparent_mask" /><ImageButtonandroid:id="@+id/ib_large"android:layout_width="40dp"android:layout_height="40dp"android:layout_alignLeft="@+id/ib_small"android:layout_below="@id/a_layout"android:layout_marginTop="10dp"android:background="@drawable/large"android:src="@drawable/transparent_mask" /><ImageButtonandroid:id="@+id/ib_traffic"android:layout_width="40dp"android:layout_height="40dp"android:layout_alignLeft="@+id/ib_loc"android:layout_below="@id/a_layout"android:layout_marginTop="10dp"android:background="@drawable/offtraffic"android:src="@drawable/transparent_mask" /><ImageButtonandroid:id="@+id/ib_loc"android:layout_width="40dp"android:layout_height="40dp"android:layout_alignParentLeft="true"android:layout_alignTop="@+id/ib_small"android:layout_marginLeft="10dp"android:background="@drawable/loc"android:src="@drawable/transparent_mask" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginBottom="10dp"android:layout_marginLeft="15dp"android:layout_marginRight="15dp"android:background="@drawable/rectangle_radius_fen"android:orientation="vertical" ><TextViewandroid:id="@+id/edit_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="15dp"android:layout_marginTop="15dp"android:gravity="center"android:text="现在出发"android:textSize="18sp"android:textStyle="bold" /><EditTextandroid:id="@+id/start_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="7dp"android:background="@drawable/creat_normal_edittext"android:drawableLeft="@drawable/radio_red"android:drawablePadding="5dp" /><EditTextandroid:id="@+id/end_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="7dp"android:background="@drawable/creat_normal_edittext"android:drawableLeft="@drawable/radio_blue"android:drawablePadding="5dp"android:hint="您要去哪儿" /></LinearLayout><ImageButtonandroid:id="@+id/ib_mode"android:layout_width="40dp"android:layout_height="40dp"android:layout_alignLeft="@+id/ib_small"android:layout_centerVertical="true"android:background="@drawable/mode"android:src="@drawable/transparent_mask" /></RelativeLayout>

下面是主函数中的代码

需要导入的包可以在百度sdk中下载 libs文件中找到

百度地图sdk下载

只需要拷贝到自己的工程文件中就可以了

package 包名;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;importcom.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.map.TextureMapView;import com.baidu.mapapi.model.LatLng;import com.yd.dawm.R;import android.app.Activity;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import android.view.View;import android.view.Window;import android.widget.EditText;import android.widget.ImageButton;import android.widget.Toast;public class CustomerMenu extends Activity implementsandroid.view.View.OnClickListener {private TextureMapView mMapView = null;private BaiduMap mBaiduMap;// *****************************************************private ImageButton ib_large, ib_small, ib_mode, ib_loc, ib_traffic;private EditText start_edit, end_edit;// 模式切换,正常模式private boolean modeFlag = true;// 当前地图缩放级别private float zoomLevel;// 定位相关private LocationClient mLocationClient;private MyLocationListener mLocationListener;// 是否第一次定位,如果是第一次定位的话要将自己的位置显示在地图 中间private boolean isFirstLocation = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 在使用SDK各组件之前初始化context信息,传入ApplicationContext// 注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext());this.requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置标题栏不可用setContentView(R.layout.customer_menu);// 获取地图控件引用mMapView = (TextureMapView) findViewById(R.id.mTexturemap);// 初始化控件initView();// 初始化地图initMap();// 定位initLocation();}private void initMap() {// 不显示缩放比例尺mMapView.showZoomControls(false);// 不显示百度地图LogomMapView.removeViewAt(1);// 百度地图mBaiduMap = mMapView.getMap();// 改变地图状态MapStatus mMapStatus = new MapStatus.Builder().zoom(15).build();MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);mBaiduMap.setMapStatus(mMapStatusUpdate);// 设置地图状态改变监听器mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {@Overridepublic void onMapStatusChangeStart(MapStatus arg0) {}@Overridepublic void onMapStatusChangeFinish(MapStatus arg0) {}@Overridepublic void onMapStatusChange(MapStatus arg0) {// 当地图状态改变的时候,获取放大级别zoomLevel = arg0.zoom;}@Overridepublic void onMapStatusChangeStart(MapStatus arg0, int arg1) {// TODO Auto-generated method stub}});}private void initLocation() {// 定位客户端的设置mLocationClient = new LocationClient(this);mLocationListener = new MyLocationListener();// 注册监听mLocationClient.registerLocationListener(mLocationListener);// 配置定位LocationClientOption option = new LocationClientOption();option.setCoorType("bd09ll");// 坐标类型option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要option.setOpenGps(true);// 打开Gpsoption.setScanSpan(1000);// 1000毫秒定位一次option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到mLocationClient.setLocOption(option);}private void initView() {// 地图控制按钮ib_large = (ImageButton) findViewById(R.id.ib_large);ib_large.setOnClickListener(this);ib_small = (ImageButton) findViewById(R.id.ib_small);ib_small.setOnClickListener(this);ib_mode = (ImageButton) findViewById(R.id.ib_mode);ib_mode.setOnClickListener(this);ib_loc = (ImageButton) findViewById(R.id.ib_loc);ib_loc.setOnClickListener(this);ib_traffic = (ImageButton) findViewById(R.id.ib_traffic);ib_traffic.setOnClickListener(this);start_edit = (EditText) findViewById(R.id.start_edit);end_edit = (EditText) findViewById(R.id.end_edit);}public void onClick(View v) {switch (v.getId()) {case R.id.ib_large:if (zoomLevel < 18) {mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());ib_small.setEnabled(true);} else {showInfo("已经放至最大,可继续滑动操作");ib_large.setEnabled(false);}break;case R.id.ib_small:if (zoomLevel > 6) {mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());ib_large.setEnabled(true);} else {ib_small.setEnabled(false);showInfo("已经缩至最小,可继续滑动操作");}break;case R.id.ib_mode:// 卫星模式和普通模式if (modeFlag) {modeFlag = false;mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);showInfo("开启卫星模式");} else {modeFlag = true;mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);showInfo("开启普通模式");}break;case R.id.ib_loc:isFirstLocation = true;showInfo("返回自己位置");break;case R.id.ib_traffic:// 是否开启交通图if (mBaiduMap.isTrafficEnabled()) {mBaiduMap.setTrafficEnabled(false);ib_traffic.setBackgroundResource(R.drawable.offtraffic);showInfo("关闭实时交通图");} else {mBaiduMap.setTrafficEnabled(true);ib_traffic.setBackgroundResource(R.drawable.ontraffic);showInfo("开启实时交通图");}break;default:break;}}@Overrideprotected void onStart() {super.onStart();// 开启定位mBaiduMap.setMyLocationEnabled(true);if (!mLocationClient.isStarted()) {mLocationClient.start();}}@Overrideprotected void onStop() {super.onStop();// 关闭定位mBaiduMap.setMyLocationEnabled(false);if (mLocationClient.isStarted()) {mLocationClient.stop();}}@Overrideprotected void onDestroy() {super.onDestroy();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理mMapView.onPause();}// 显示消息private void showInfo(String str) {Toast.makeText(CustomerMenu.this, str, Toast.LENGTH_SHORT).show();}// 自定义的定位监听private class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {// 将获取的location信息给百度mapMyLocationData data = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(data);if (isFirstLocation) {// 获取经纬度LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);// mBaiduMap.setMapStatus(status);//直接到中间mBaiduMap.animateMapStatus(status);// 动画的方式到中间isFirstLocation = false;showInfo("当前位置:" + location.getAddrStr());start_edit.setText(location.getAddrStr());}}}}

百度地图的定位不太准确

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。