【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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值