android 百度地图 定位功能

废话不多说 直接新建一个新android项目:location,然后花一分钟申请一个key,然后就是把百度定位demo抄一下就行

1:首先在AndroidManifest.xml中添加权限

<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" />

2:在AndroidManifest.xml文件中使用自己写的Application 在application节点中加上一行代码

android:name="com.baidu.baidulocationdemo.LocationApplication"

3:在application节点上 复制如下内容

<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>

<!-- meta-data需要写在application中 -->

<meta-data

android:name="com.baidu.lbsapi.API_KEY"

android:value="xAxmR5WgrssC9ATV8gZOvq96" />

在这注意需要把换成自己申请的key

4:配置就算ok了,那么就写代码么,谁叫我们是码农呢? 首先看下自己定义的类MyApplication.java

package com.example.location;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.Poi;
import android.app.Application;
import android.app.Service;
import android.os.Vibrator;
import android.util.Log;
import android.widget.TextView;
import java.util.List;

public class MyApplication extends Application {
    public LocationClient mLocationClient;
    public MyLocationListener mMyLocationListener;
    public TextView mLocationResult,logMsg;
    public TextView trigger,exit;
    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) {
	            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号和大体定位时间到[email protected],会有人追查原因");
	            } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
	                sb.append("\ndescribe : ");
	                sb.append("网络不同导致定位失败,请检查网络是否通畅");
	            } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
	                sb.append("\ndescribe : ");
	                sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
	            }
	            sb.append("\nlocationdescribe : ");// 位置语义化信息
	            sb.append(location.getLocationDescribe());
	            List<Poi> list = location.getPoiList();// POI信息
	            if (list != null) {
	                sb.append("\npoilist size = : ");
	                sb.append(list.size());
	                for (Poi p : list) {
	                    sb.append("\npoi= : ");
	                    sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
	                }
	            }
	            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();
	        }
	    }
}

这里是直接从百度定位sdk demo中复制过来的,这个不需要去敲,因为它没啥技术和逻辑可言.

5:MainActivity.java

package com.example.location;
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.widget.TextView;

public class MainActivity extends Activity {
	private TextView tv_locaiton_result;
	private LocationClient mLocationClient;
	private LocationMode tempMode = LocationMode.Hight_Accuracy;
	private String tempcoor="gcj02";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mLocationClient = ((MyApplication)getApplication()).mLocationClient;
		tv_locaiton_result = (TextView) findViewById(R.id.tv_locaiton_result);
		((MyApplication)getApplication()).mLocationResult = tv_locaiton_result;
		initLocation();
	}
	 private void initLocation(){
	        LocationClientOption option = new LocationClientOption();
	        option.setLocationMode(tempMode);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
	        option.setCoorType(tempcoor);//可选,默认gcj02,设置返回的定位结果坐标系,
	        int span=5000;
	        option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
	        option.setOpenGps(true);//可选,默认false,设置是否使用gps
	        option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
	        option.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
	        option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
	        option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
	        option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
	        mLocationClient.setLocOption(option);
	        mLocationClient.start();
	    }
}

ok,定位就好了 不过这是定位获取到地址,地图上显示  下次弄

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 10:08:17

android 百度地图 定位功能的相关文章

Android百度地图定位

说到百度地图,现在这个时候应该都是众说周知了吧,多的话不扯了,直接奔向主题. 接入百度地图api必须申请key,这里申请key就不用说了,官方文档上面有介绍如何去申请key. 这里使用的百度地图定位是4.2的版本,api是3.1.1版本.如果申请好了key,那么就可以进入编码阶段了,具体实现如下: 1.引入百度地图相关jar包及armeabi目录到libs目录中 2.在项目的AndroidManifest.xml文件中配置相关信息 配置权限 <uses-permission android:na

Android 百度地图定位(手动+自动) 安卓开发教程

近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置.  经过2天研究和咨询,找到了解决方案,在此备忘一下. 注意:定位使用真机才能够真正定位:模拟器的话,在DDMS中的Emulator Control中,选择Manual,下面单选按钮选择Decimal,然后填写经纬度,send后,再点击定位我的位置按钮,就能定位了(这应该算是固定定位,哈哈...). 1.第一步当然

Android百度地图定位demo

AS写的百度地图定位demo 版本V6.0.5 先上效果图     版权声明:本文为博主原创文章,未经博主允许不得转载.

【MUI】百度地图定位功能

博主最近进行一款APP开发,需要用到定位功能,经过一番折腾,终于搞定,不废话,代码如下 mui.plusReady(function() { var longitude, latitude; //var map = new BMap.Map("container"); // navigator.geolocation.getCurrentPosition(function(position) { // longitude = position.coords.longitude; //

初学HBuilder之MUI框架---实现百度地图定位功能

最近接触了一款移动端APP框架,CSS库是MUI,JS库是5+Runtime. 个人感觉这两个库使用起来特别方便. 话不多说,直接上代码: 这是引用百度地图的JS <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=HR3RRyTsXYdQ3QzzG5yUkg0q"></script> <script type="text/

android 百度地图定位开发2

先下载了示例代码 进行配置(可查看开发 指南 Hello BaiDuMap) 第一步:创建并配置工程(具体方法参见工程配置部分的介绍): 第二步:在AndroidManifest中添加开发密钥.所需权限等信息: (1)在application中添加开发密钥 <application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> &l

android 百度地图定位开发1

首先注册成为百度开发者 然后进入百度开发者中心 点击LBS 跳到下一个页面 点击Android 开发 里面的基础地图 进入  点击获取密钥 进入   点击创建应用 进入     应用名称自己填 应用类型 选Android SDK   包名为项目包名  SHA1点击查看详细配置方法 进入可以自己看 这里直接讲方法 第一种方法: 第1步:运行进入控制台 第2步:定位到.android文件夹下,输入cd .android 第3步:输入keytool -list -v -keystore debug.k

android百度地图定位开发

一.activity import android.app.Activity; import android.graphics.Point;import android.graphics.PointF;import android.os.Bundle;import android.os.Message;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu

Android百度地图定位定到了海里,定到了非洲

百度定位偶尔会出现定到非洲的现象,一开始我以为是GPS信号不太好的原因,后来出现的次数有点多了,上网查找才发现是权限不够的原因 官网地址http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/create-project/android-studio 注意这个权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 除了