`

【android】使用百度api获得你的地址

 
阅读更多
采用百度开放平台的api对自己位置的定位的好处有很多。
1,完全不需要你做任何事情。程序自动给调用。
2,稳定。流量少。之前做的有些程序是从网络上抓取自己的ip地址来进行定位。
而百度的这个,返回一些你位置的基本信息。
一下就是代码:
基础类,这个类保存个人位置信息。
package com.duduli.li;

public class Addr {
	private String time;
	private String error;
	private String pointX;
	private String PointY;
	private String radius;
	private String addr;
	public String getTime() {
		return time;
	}
	public void setTime(String time) {
		this.time = time;
	}
	public String getPointX() {
		return pointX;
	}
	public void setPointX(String pointX) {
		this.pointX = pointX;
	}
	public String getPointY() {
		return PointY;
	}
	public void setPointY(String pointY) {
		PointY = pointY;
	}
	public String getError() {
		return error;
	}
	public void setError(String error) {
		this.error = error;
	}
	public String getRadius() {
		return radius;
	}
	public void setRadius(String radius) {
		this.radius = radius;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
}


第二个为百度返回json的解析类,将获得的信息解析到基础类中进行保存。
package com.duduli.li;

import org.json.JSONException;
import org.json.JSONObject;

public class JsonParse {
	
	public Addr parseJson(String json) throws JSONException{
		
		Addr addrMsg = new Addr();
		JSONObject jo = new JSONObject(json);
//		解析json中的result值
		String result = jo.getString("result");
		JSONObject resultJO = new JSONObject(result);
		String time = resultJO.getString("time");
		String error = resultJO.getString("error");
		addrMsg.setTime(time);
		addrMsg.setError(error);
		
//		解析json中的content值
		String content = jo.getString("content");
		JSONObject contentJO = new JSONObject(content);
		String point = contentJO.getString("point");
		
//		解析json中point数据
		JSONObject pointJO = new JSONObject(point);
		String x = pointJO.getString("x");
		String y = pointJO.getString("y");
		addrMsg.setPointX(x);
		addrMsg.setPointY(y);
		
		
		String radius = contentJO.getString("radius");
		addrMsg.setRadius(radius);
		
		
//		解析json中add数据
		String addr = contentJO.getString("addr");
		JSONObject addrJO = new JSONObject(addr);
		
		String detail = addrJO.getString("detail");
		addrMsg.setAddr(detail);
		
		return addrMsg;
	}
}


第三个为layout的main.xml
    <com.baidu.mapapi.MapView android:id="@+id/bmapsView"
		android:layout_width="fill_parent" android:layout_height="fill_parent"
		android:clickable="true" />


最后是activity。可以显示地图和定位的。
package com.duduli.li;

import org.json.JSONException;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;

import com.baidu.location.LocServiceMode;
import com.baidu.location.LocationChangedListener;
import com.baidu.location.LocationClient;
import com.baidu.location.ReceiveListener;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.Overlay;

public class BaiduMapTestActivity extends MapActivity {
	private LocationClient lc ;
	private BMapManager mBMapMan;
	private MapView mMapView;
	private double x;
	private double y;
//	private GeoPoint gp;
	
	@Override
	protected void onCreate(Bundle arg0) {
		// TODO Auto-generated method stub
		super.onCreate(arg0);
		setContentView(R.layout.main);
		
		mBMapMan = new BMapManager(getApplication());
		mBMapMan.init("279B8BABF0AA0A98B33A494C9E310BBB10137789", null);
		super.initMapActivity(mBMapMan);
		
		lc = new LocationClient(this);
        lc.setCoorType("gcj02");
        lc.setServiceMode(LocServiceMode.Background);
        lc.addLocationChangedlistener(new MyLocationChangedListener());
        lc.addRecerveListener(new MyReceiveListenner());
        lc.start();
        
        try {
			Thread.sleep(3000);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		lc.getLocation();
	}

	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}

	
	
	public class MyLocationChangedListener implements LocationChangedListener {
        public void onLocationChanged() {
            //在此添加,位置改变触发的功能。
//        	tv.append(text)
        }
    }
    
    
    public class MyReceiveListenner implements ReceiveListener{
        public void onReceive(String strData) {
            //在此处理 获取到的定位结果的json串。
        	
            try {
    			JsonParse jp = new JsonParse();
    			Addr ad = jp.parseJson(strData);
//    			x = getPoint(ad.getPointX());//114.105
//    			y = getPoint(ad.getPointY());//22.54
    			
    			x = Double.valueOf(ad.getPointX());
    			y = Double.valueOf(ad.getPointY());

    			mMapView = (MapView) findViewById(R.id.bmapsView);
    			
    			mMapView.setBuiltInZoomControls(true);
    			mMapView.getOverlays().add(new MyOverlay());
    			
    			MapController mc  = mMapView.getController();
    			
    			GeoPoint gp = new GeoPoint((int)(y*1E6),(int)(x*1E6));
//    			GeoPoint gp = new GeoPoint((int)(22.54762429*1E6),(int)(114.1054699*1E6));
    			mc.setCenter(gp);
    			mc.setZoom(12);
    			
    			
    			mBMapMan.start();
    			
    		} catch (JSONException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        }
        
       /* public int getPoint(String s){
        	String str = s.substring(0, s.indexOf("."))+s.substring(s.indexOf(".")+1, s.indexOf(".")+7);
        	return Integer.valueOf(str);
        }*/
        
    }
    
    
    public class MyOverlay extends Overlay {
        GeoPoint geoPoint = new GeoPoint((int)(y*1E6),(int)(x*1E6));
        Paint paint = new Paint();
     
        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            
            Point point = mMapView.getProjection().toPixels(geoPoint, null);
            Bitmap bmp = BitmapFactory.decodeResource(getResources(),android.R.drawable.presence_online);
            canvas.drawBitmap(bmp,point.x, point.y,paint);
            canvas.drawText("你在这里", point.x, point.y, paint);
        }
    }
}


最后还有权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></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.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>
	<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
	
分享到:
评论

相关推荐

    android 通过百度API获得你的gps位置

    `ACCESS_FINE_LOCATION`和`INTERNET`权限是必不可少的,前者允许应用访问GPS或其他位置提供者的数据,后者则用于网络通信,因为百度API通常需要网络连接来工作: ```xml &lt;uses-permission android:name="android....

    利用百度地图API制作android地图应用

    在Android开发中,创建一款基于地图的应用是一项常见的需求,而百度地图API则为开发者提供了强大的地图功能支持。本文将深入探讨如何利用百度地图API来制作Android地图应用,以及实现地图上的位置搜索和周边信息显示...

    android使用百度地图api在地图显示自己的位置

    以上就是“在Android上使用百度地图API显示自己位置”的主要技术点。通过这些步骤,开发者可以实现一个基本的定位并显示功能。在实际应用中,可能还需要根据具体需求进行更多的定制,比如设置定位频率、添加路线规划...

    android 基于百度api的天气预报

    在Android开发中,实现基于百度API的天气预报功能是一项常见的任务。这个小demo为我们提供了一个简单易懂的实例,展示了如何利用HttpClient库获取并解析来自百度API的天气数据。接下来,我们将深入探讨这个过程涉及...

    Android通过百度api获取地名城市名

    本文将详细介绍如何在Android应用中利用百度API获取地名和城市名,以及相关的步骤和技术要点。 首先,我们需要在百度地图开放平台(http://lbsyun.baidu.com/)上注册账号并创建一个应用,获取到API密钥(AK)。这...

    Android使用百度API定位当前城市得到城市名城

    以上就是利用百度地图API在Android中获取当前城市名字的完整流程。通过这个小例子,开发者可以直接在自己的项目中使用这些代码,快速实现定位功能。记住,始终要遵循百度地图API的使用规则,并尊重用户的隐私。

    android 百度地图api 经纬度

    总之,通过正确集成百度地图API,设置定位服务,并处理可能出现的问题,我们可以在Android应用中方便地获取和使用经纬度信息。这个小例子不仅展示了基本的定位功能,还提供了一种解决GPS定位为null的解决方案。

    百度地图api定位(Android)

    值得注意的是,这里的百度API Key使用的是开发者个人的Key,因此在实际使用时,你需要替换为自己的API Key,以避免不必要的问题。 首先,我们来了解一下如何集成百度地图API到Android应用中: 1. **注册成为百度...

    百度地图获得详细地址,城市,省份,街道等

    异步获得百度地图 详细地址 城市 省份 街道,已打包成jar包,直接调用即可,不过需要你到百度地图官网注册一个秘钥(ak),这是调用百度地图必须的。使用方法: 1.manifest下声明service: &lt;service android:name=...

    Android,百度地图标注及聚合

    在Android开发中,百度地图API是一个非常重要的工具,它提供了丰富的地图展示、定位、路径规划等功能,使得开发者能够轻松地将地图集成到自己的应用程序中。本篇主要探讨如何在Android应用中实现百度地图的标注及...

    Android使用百度地图API定位所在城市、显示城市名称

    网上关于百度地图ADI对位的Demo很多,但是找一个定位到当前城市和得到城市名字却很少,很多项目中都有自动地位到当前城市显示城市名字的的功能,我也遇到需要此功能的需求,但是找了好久都没用,于是根据自己写了一...

    Android定位功能开发-使用百度地图API的例子

    总结起来,使用百度地图API在Android应用中开发定位功能涉及集成SDK、设置权限、初始化地图、开启定位服务、使用地理编码服务等多个环节。理解并熟练运用这些知识点,将有助于你构建功能丰富的定位应用。

    Android百度地图API定位locSDK_3.1Demo

    "Android百度地图API定位locSDK_3.1Demo"是一个示例项目,它演示了如何利用百度的LocSDK 3.1版本来实现精确、高效的定位服务。下面将详细介绍这个过程中的关键知识点。 首先,我们需要理解定位的基础概念。定位服务...

    Android百度地图demo

    本项目“Android百度地图demo”是一个示例工程,它利用了百度官方提供的SDK,帮助开发者快速理解和掌握如何在自己的应用中整合百度地图服务。 首先,我们需要了解**百度地图API**。这是百度为开发者提供的地理位置...

    Android中使用百度地图API开发应用时的基本步骤.pdf

    在Android平台上开发应用程序时,有时候我们需要...通过以上步骤,便可以在Android应用中集成并使用百度地图API,实现丰富的地图功能。随着对API的深入理解和实践,开发者可以构建出更多具有创新性和实用性的地图应用。

    Android用百度地图做的定位和地址解析

    在Android开发中,集成百度地图API进行定位和地址解析是一项常见的任务。这涉及到地理信息系统(GIS)中的位置服务,主要用于获取设备的当前地理位置,并能够将经纬度坐标转换为可读的地址信息。以下是对这个主题的...

    百度地图API Demo

    由于包含了28个不同的示例,开发者能够获得丰富的实践经验和灵感,从而更好地掌握百度地图API的使用方法。 【标签】:“android”表明这个项目是专为Android平台设计的,意味着它遵循了Android的开发规范,并且可以...

    Android 百度SDK获得当前经纬度

    这个密钥是连接你的应用和百度服务的关键,确保你能使用百度提供的各种服务,包括定位服务。 安装百度地图SDK后,在Android项目中引入相关依赖。在`build.gradle`文件的dependencies块中添加如下依赖: ```groovy ...

    百度地图api doc

    文档提供了百度地图API在不同平台上的使用说明,包括Android和iOS平台。在Android平台上,开发者可以通过Intent协议调用百度地图客户端,具体来说,需要使用一个格式为intent://product/[service/]action[?...

Global site tag (gtag.js) - Google Analytics