百度地图定位v6.1.3--1.官方demo实践分析
来源:互联网 发布:网络接口都有哪些 编辑:程序博客网 时间:2024/03/29 06:42
前言:基本的小白知识可以去前面或百度开放API脑补。
(一):申请开发Key
(二)下载SDK
我们要使用Baidu地图开发,我们首先要去下载开发sdk库,下载地址:http://developer.baidu.com/map/sdkandev-download.htm
(三)下面创建项目
1.下载上面lib包,创建demo项目把jar和.so文件引入进去如下: 2.自定义Applicaiton,实现实时位置回调监听
package com.example.testbdmaplocation;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import android.app.Application;import android.app.Service;import android.os.Vibrator;import android.util.Log;import android.widget.TextView;import java.util.List;/** * 主Application,所有百度定位SDK的接口说明请参考线上文档:http://developer.baidu.com/map/loc_refer/index.html * * 百度定位SDK官方网站:http://developer.baidu.com/map/index.php?title=android-locsdk */public class LocationApplication extends Application { public LocationClient mLocationClient; public MyLocationListener mMyLocationListener; public TextView mLocationResult; public Vibrator mVibrator; @Override public void onCreate() { super.onCreate(); mLocationClient = new LocationClient(this.getApplicationContext()); mMyLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mMyLocationListener); mVibrator =(Vibrator)getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE); } /** * 实现实时位置回调监听 */ public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { //Receive Location 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){// GPS定位结果 sb.append("\nspeed : "); sb.append(location.getSpeed());// 单位:公里每小时 sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); sb.append("\nheight : "); sb.append(location.getAltitude());// 单位:米 sb.append("\ndirection : "); sb.append(location.getDirection()); sb.append("\naddr : "); sb.append(location.getAddrStr()); sb.append("\ndescribe : "); sb.append("gps定位成功"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果 sb.append("\naddr : "); sb.append(location.getAddrStr()); //运营商信息 sb.append("\noperationers : "); sb.append(location.getOperators()); sb.append("\ndescribe : "); sb.append("网络定位成功"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果 sb.append("\ndescribe : "); sb.append("离线定位成功,离线定位结果也是有效的"); } else if (location.getLocType() == BDLocation.TypeServerError) { sb.append("\ndescribe : "); sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { sb.append("\ndescribe : "); sb.append("网络不同导致定位失败,请检查网络是否通畅"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { sb.append("\ndescribe : "); sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机"); } logMsg(sb.toString()); Log.i("BaiduLocationApiDem", sb.toString()); // mLocationClient.setEnableGpsRealTimeTransfer(true); } } /** * 显示请求字符串 * @param str */ public void logMsg(String str) { try { if (mLocationResult != null) mLocationResult.setText(str); } catch (Exception e) { e.printStackTrace(); } }}
2:MainActivity.java程序入口,点击选择其他页面
package com.example.testbdmaplocation;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends Activity {private ListView FunctionList ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);FunctionList = (ListView)findViewById(R.id.functionList);FunctionList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));} @Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();FunctionList.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// TODO Auto-generated method stubClass TargetClass = null; switch (arg2) {case 0:TargetClass = LocationActivity.class;break;case 1:TargetClass = NotifyActivity.class;break;//case 2 ://TargetClass = QuestActivity.class;//break;default:break;}if(TargetClass != null){Intent intent = new Intent(MainActivity.this, TargetClass);startActivity(intent);}}});}private List<String> getData(){ List<String> data = new ArrayList<String>(); data.add("基础定位功能"); data.add("位置消息提醒"); data.add("常见问题说明"); return data; }}3:LocationActivity.java发起定位请求,并显示结果
package com.example.testbdmaplocation;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.location.LocationClientOption.LocationMode;import android.app.Activity;import android.os.Bundle;import android.text.method.ScrollingMovementMethod;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.TextView;public class LocationActivity extends Activity{ private LocationClient mLocationClient; private TextView LocationResult,ModeInfor; private Button startLocation; private RadioGroup selectMode,selectCoordinates; private EditText frequence; private LocationMode tempMode = LocationMode.Hight_Accuracy; private String tempcoor="gcj02"; private CheckBox checkGeoLocation; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.location); mLocationClient = ((LocationApplication)getApplication()).mLocationClient; LocationResult = (TextView)findViewById(R.id.textView1); LocationResult.setMovementMethod(ScrollingMovementMethod.getInstance()); ModeInfor= (TextView)findViewById(R.id.modeinfor); ModeInfor.setText(getString(R.string.hight_accuracy_desc)); ((LocationApplication)getApplication()).mLocationResult = LocationResult; frequence = (EditText)findViewById(R.id.frequence); checkGeoLocation = (CheckBox)findViewById(R.id.geolocation); startLocation = (Button)findViewById(R.id.addfence); startLocation.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub initLocation(); if(startLocation.getText().equals(getString(R.string.startlocation))){ mLocationClient.start();//定位SDK start之后会默认发起一次定位请求,开发者无须判断isstart并主动调用request mLocationClient.requestLocation(); startLocation.setText(getString(R.string.stoplocation)); }else{ mLocationClient.stop(); startLocation.setText(getString(R.string.startlocation)); } } }); selectMode = (RadioGroup)findViewById(R.id.selectMode); selectCoordinates= (RadioGroup)findViewById(R.id.selectCoordinates); selectMode.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub String ModeInformation = null; switch (checkedId) { case R.id.radio_hight: tempMode = LocationMode.Hight_Accuracy; ModeInformation = getString(R.string.hight_accuracy_desc); break; case R.id.radio_low: tempMode = LocationMode.Battery_Saving; ModeInformation = getString(R.string.saving_battery_desc); break; case R.id.radio_device: tempMode = LocationMode.Device_Sensors; ModeInformation = getString(R.string.device_sensor_desc); break; default: break; } ModeInfor.setText(ModeInformation); } }); selectCoordinates.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch (checkedId) { case R.id.radio_gcj02: tempcoor="gcj02";//国家测绘局标准 break; case R.id.radio_bd09ll: tempcoor="bd09ll";//百度经纬度标准 break; case R.id.radio_bd09: tempcoor="bd09";//百度墨卡托标准 break; default: break; } } }); } @Override protected void onStop() { // TODO Auto-generated method stub mLocationClient.stop(); super.onStop(); } private void initLocation(){ LocationClientOption option = new LocationClientOption(); option.setLocationMode(tempMode);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setCoorType(tempcoor);//可选,默认gcj02,设置返回的定位结果坐标系, int span=1000; try { span = Integer.valueOf(frequence.getText().toString()); } catch (Exception e) { // TODO: handle exception } option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 option.setIsNeedAddress(checkGeoLocation.isChecked());//可选,设置是否需要地址信息,默认不需要 option.setOpenGps(true);//可选,默认false,设置是否使用gps option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 option.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 mLocationClient.setLocOption(option); }}
4:NotifyActivity.java开启位置提醒:
package com.example.testbdmaplocation;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.BDNotifyListener;import com.baidu.location.LocationClient;import android.app.Activity;import android.app.Service;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.Vibrator;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class NotifyActivity extends Activity{ private Button startNotify; private Vibrator mVibrator; private LocationClient mLocationClient; private NotiftLocationListener listener; private double longtitude,latitude; private NotifyLister mNotifyLister; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.notify); listener = new NotiftLocationListener(); mVibrator =(Vibrator)getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE); startNotify = (Button)findViewById(R.id.notifystart); mLocationClient = new LocationClient(this); mLocationClient.registerLocationListener(listener); startNotify.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(startNotify.getText().toString().equals("开启位置提醒")){ mLocationClient.start(); startNotify.setText("关闭位置提醒"); }else{ if(mNotifyLister!=null){ mLocationClient.removeNotifyEvent(mNotifyLister); startNotify.setText("开启位置提醒"); } } } }); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); mLocationClient.removeNotifyEvent(mNotifyLister); mLocationClient = null; mNotifyLister= null; listener = null; } private Handler notifyHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); mNotifyLister = new NotifyLister(); mNotifyLister.SetNotifyLocation(latitude,longtitude, 3000,"gcj02");//4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型(gcj02,gps,bd09,bd09ll) mLocationClient.registerNotify(mNotifyLister); } }; public class NotiftLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { //Receive Location longtitude = location.getLongitude(); latitude = location.getLatitude(); notifyHandler.sendEmptyMessage(0); } } public class NotifyLister extends BDNotifyListener{ public void onNotify(BDLocation mlocation, float distance){ mVibrator.vibrate(1000);//振动提醒已到设定位置附近 Toast.makeText(NotifyActivity.this, "震动提醒", Toast.LENGTH_SHORT).show(); } }}
5:加入权限配置:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testbdmaplocation" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:name="com.example.testbdmaplocation.LocationApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.testbdmaplocation.LocationActivity"/> <activity android:name="com.example.testbdmaplocation.NotifyActivity"/> <!-- 百度定位权限配置start --> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > <intent-filter> <action android:name="com.baidu.location.service_v2.2" > </action> </intent-filter> </service> <!-- 开发者申请的key --> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="HMA42siusR667AOHmeE70m6y" /> </application> <!-- 这个权限用于进行网络定位 --> <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.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> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 百度定位权限配置end --></manifest>
1 0
- 百度地图定位v6.1.3--1.官方demo实践分析
- 百度定位官方Demo
- 百度地图官方Demo
- 百度地图定位demo
- 百度地图定位demo
- BaiduMap---百度地图官方Demo
- Android百度地图定位demo
- 百度地图定位Demo补充
- 百度地图的定位demo
- 百度地图定位到大西洋问题,还有官方demo验证key失败问题
- 百度地图官方Demo的运行使用
- 根据官方api调用百度地图定位
- 百度地图官方的定位和方法
- 百度地图 定位 地图
- android 百度地图api demo 定位白屏
- 2016年最新百度地图开发demo,定位+导航
- 百度地图简要demo--关键字查询,点定位
- 百度地图,百度定位。
- 数码管的消影
- Could not launch “XXXX” process launch failed: Security
- lnux 的信号
- “移动互联网+”第一股 正益移动登陆新三板
- linux nfs文件挂载模拟云存储
- 百度地图定位v6.1.3--1.官方demo实践分析
- Android中的AndroidAnnotations
- c#自定义控件
- 扣丁学堂——AlarmManager
- 关于setsid() 函数的说明
- 山东省第六届蓝桥杯 ///标题:奖券数目//c/c++组
- Volley JsonObjectRequest 获取json字符串乱码
- 解析检测先锋之气体传感器的技术应用
- Java 开发必会的 Linux 命令