如何用百度地图api开发app必须要api吗

android 基于百度地图api开发定位以及获取详细地址 - 机遇&速度 - ITeye博客
博客分类:
一:百度地图开发必须要到百度开发平台开发下载相应的库,已经申请百度地图开发,在这个博客里面有详细的说明和演示,(如果不懂得请看此文章)
二:新建项目baidumaplocation.设计main.xml文件这里注意的是MapView控件必须使用来自百度库封装好的com.baidu.mapapi.MapView 。设计代码如下:
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" &
&FrameLayout
android:id="@+id/map_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" &
&!-- 百度MapView控件 --&
&com.baidu.mapapi.MapView
android:id="@+id/map_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0Mg_koWoyZUiYLfZxmPfp4LKInB5LqTnagYueaw"
android:clickable="true"
android:enabled="true" /&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:paddingBottom="105dip" &
&!-- 地址信息显示TextView --&
android:id="@+id/map_bubbleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/location_tips"
android:gravity="left|center"
android:maxEms="12"
android:paddingLeft="12dip"
android:paddingRight="10dip"
android:text="@string/load_tips"
android:textColor="#cfcfcf"
android:textSize="14sp" /&
&/LinearLayout&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical" &
&!-- 位置指标显示ImageView --&
&ImageView
android:id="@+id/point_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="30dip"
android:src="@drawable/point_start" /&
&/LinearLayout&
&/FrameLayout&
&/LinearLayout&
三:创建覆盖整个地图捕捉触控事件的MyMapOverlay继承Overlay
import android.view.MotionE
import com.baidu.mapapi.GeoP
import com.baidu.mapapi.MapV
import com.baidu.mapapi.O
//覆盖整个地图捕捉触控事件的OverLay
public abstract class MyMapOverlay extends Overlay{
private int point_X;
private int point_Y;
private GeoPoint newP
public MyMapOverlay(int x,int y){
boolean flagMove=
//这里实现根据地图移动时重新获取屏幕中心点的经纬度坐标
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
System.out.println("X-&"+event.getX()+":"+point_X);
System.out.println("Y-&"+event.getY()+":"+point_Y);
if(event.getAction() == MotionEvent.ACTION_DOWN){
changePoint(newPoint,1);
}else if(event.getAction() == MotionEvent.ACTION_UP){
newPoint = mapView.getProjection().fromPixels(point_X,point_Y);
changePoint(newPoint,2);
public abstract void changePoint(GeoPoint newPoint,int type);
四:LocationActivity类继承百度库的MapActivity以及实现LocationListener接口,代码如下:
package com.location.
import java.io.IOE
import java.util.L
import java.util.L
import android.content.I
import android.location.A
import android.location.G
import android.location.L
import android.os.B
import android.os.H
import android.os.M
import android.view.V
import android.view.W
import android.widget.TextV
import com.android.map.MyMapO
import com.baidu.mapapi.BMapM
import com.baidu.mapapi.GeoP
import com.baidu.mapapi.LocationL
import com.baidu.mapapi.MKAddrI
import com.baidu.mapapi.MKBusLineR
import com.baidu.mapapi.MKDrivingRouteR
import com.baidu.mapapi.MKLocationM
import com.baidu.mapapi.MKPoiR
import com.baidu.mapapi.MKS
import com.baidu.mapapi.MKSearchL
import com.baidu.mapapi.MKSuggestionR
import com.baidu.mapapi.MKTransitRouteR
import com.baidu.mapapi.MKWalkingRouteR
import com.baidu.mapapi.MapA
import com.baidu.mapapi.MapC
import com.baidu.mapapi.MapV
import com.baidu.mapapi.O
public class LocationActivity extends MapActivity implements LocationListener {
private MapView mapV
private MapController mMapC
private List&Overlay& mapO
public GeoPoint locP
private MyMapOverlay mO
private TextView desT
private String lost_
private int point_X;
private int point_Y;
public final int MSG_VIEW_LONGPRESS = 10001;
public final int MSG_VIEW_ADDRESSNAME = 10002;
public final int MSG_GONE_ADDRESSNAME = 10003;
private Intent mI
private int mL
private int mL
private BMapManager mapM
private MKLocationManager mLocationManager =
private boolean isLoadAdrr =
private MKSearch mMKS
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
initMap();
mIntent = getIntent();
mLatitude = mIntent.getIntExtra("latitude", 0);
mLongitude = mIntent.getIntExtra("longitude", 0);
name = mIntent.getStringExtra("name");
mapView = (MapView) findViewById(R.id.map_view);
desText = (TextView) this.findViewById(R.id.map_bubbleText);
lost_tips = getResources().getString(R.string.load_tips);
if (mLatitude != 0 && mLongitude != 0) {
locPoint = new GeoPoint((int) (mLatitude * 1E6),
(int) (mLongitude * 1E6));
desText.setText(name);
mapView.setBuiltInZoomControls(true);
mapView.setClickable(true);
mMapCtrl = mapView.getController();
point_X = this.getWindowManager().getDefaultDisplay().getWidth() / 2;
point_Y = this.getWindowManager().getDefaultDisplay().getHeight() / 2;
mOverlay = new MyMapOverlay(point_X, point_Y) {
public void changePoint(GeoPoint newPoint, int type) {
if (type == 1) {
mHandler.sendEmptyMessage(MSG_GONE_ADDRESSNAME);
locPoint = newP
mHandler.sendEmptyMessage(MSG_VIEW_LONGPRESS);
mapOverlays = mapView.getOverlays();
if (mapOverlays.size() & 0) {
mapOverlays.clear();
mapOverlays.add(mOverlay);
mMapCtrl.setZoom(20);
private void initMap() {
// 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("C66C759AAE38F5D540", null);
super.initMapActivity(mapManager);
// 实例化搜索地址类
mMKSearch = new MKSearch();
// 初始化搜索地址实例
mMKSearch.init(mapManager, new MySearchListener());
mLocationManager = mapManager.getLocationManager();
// 注册位置更新事件
mLocationManager.requestLocationUpdates(this);
// 使用GPS定位
mLocationManager
.enableProvider((int) MKLocationManager.MK_GPS_PROVIDER);
protected void onResume() {
if (mapManager != null) {
mapManager.start();
super.onResume();
protected void onPause() {
isLoadAdrr =
if (mapManager != null) {
mapManager.stop();
super.onPause();
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
* 通过经纬度获取地址
* @param point
private String getLocationAddress(GeoPoint point) {
String add = "";
Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
List&Address& addresses = geoCoder.getFromLocation(
point.getLatitudeE6() / 1E6, point.getLongitudeE6() / 1E6,
Address address = addresses.get(0);
int maxLine = address.getMaxAddressLineIndex();
if (maxLine &= 2) {
add = address.getAddressLine(1) + address.getAddressLine(2);
add = address.getAddressLine(1);
} catch (IOException e) {
e.printStackTrace();
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_VIEW_LONGPRESS:// 处理长按时间返回位置信息
if (null == locPoint)
mMKSearch.reverseGeocode(locPoint);
desText.setVisibility(View.VISIBLE);
desText.setText(lost_tips);
mMapCtrl.animateTo(locPoint);
mapView.invalidate();
case MSG_VIEW_ADDRESSNAME:
desText.setText((String) msg.obj);
desText.setVisibility(View.VISIBLE);
case MSG_GONE_ADDRESSNAME:
desText.setVisibility(View.GONE);
// 关闭程序也关闭定位
protected void onDestroy() {
if (mapManager != null) {
mapManager.destroy();
mapManager =
super.onDestroy();
* 根据MyLocationOverlay配置的属性确定是否在地图上显示当前位置
protected boolean isLocationDisplayed() {
* 当位置发生变化时触发此方法
* @param location
public void onLocationChanged(Location location) {
if (location != null) {
locPoint = new GeoPoint((int) (location.getLatitude()* 1E6),
(int) (location.getLongitude()* 1E6));
mHandler.sendEmptyMessage(MSG_VIEW_LONGPRESS);
* 内部类实现MKSearchListener接口,用于实现异步搜索服务
* @author liufeng
public class MySearchListener implements MKSearchListener {
* 根据经纬度搜索地址信息结果
* @param result
* @param iError
错误号(0表示正确返回)
public void onGetAddrResult(MKAddrInfo result, int iError) {
if (result == null) {
Message msg = new Message();
msg.what = MSG_VIEW_ADDRESSNAME;
msg.obj = result.strA
mHandler.sendMessage(msg);
* 驾车路线搜索结果
* @param result
* @param iError
错误号(0表示正确返回)
public void onGetDrivingRouteResult(MKDrivingRouteResult result,
int iError) {
* POI搜索结果(范围检索、城市POI检索、周边检索)
* @param result
* @param type
返回结果类型(11,12,21:poi列表 7:城市列表)
* @param iError
错误号(0表示正确返回)
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
* 公交换乘路线搜索结果
* @param result
* @param iError
错误号(0表示正确返回)
public void onGetTransitRouteResult(MKTransitRouteResult result,
int iError) {
* 步行路线搜索结果
* @param result
* @param iError
错误号(0表示正确返回)
public void onGetWalkingRouteResult(MKWalkingRouteResult result,
int iError) {
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub
五:在AndroidManifest.xml住添加相关的访问权限
&!-- 访问网络的权限 --&
&uses-permission android:name="android.permission.INTERNET" /&
&!-- 访问精确位置的权限 --&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
&!-- 访问网络状态的权限 --&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&!-- 访问WIFI网络状态的权限 --&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&!-- 改变WIFI网络状态的权限 --&
&uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&
&!-- 读写存储卡的权限 --&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&!-- 读取电话状态的权限 --&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
六:运行结果如下图:
描述: 源码
下载次数: 3743
浏览 149473
相关知识库:
4.2以上版本就不能用了 确实用不了了
您好!请问为什么将您代码放我电脑上运行时,报java.nio.bufferunderflowexception错误。请问这是什么原因?该怎么样去解决?
你这个getLocationAddress 方法没有用到,,,为什么点击绿色的之后能够显示位置呢?requestWindowFeature(Window.FEATURE_NO_TITLE);&& 这一句有什么作用getLocationAddress方法确实没有用到,但是这里用的是百度封装好的方法,从MKSearchListener 接口的onGetAddrResult方法获取到位置信息的requestWindowFeature(Window.FEATURE_NO_TITLE);这句是去掉标题栏的
怎样在地图上显示的是你当前所在的位置上面写得很清楚,你要是仔细看就懂了,首先获取到你当前的经纬度,然后根据经纬度来获取GeoPoint对象,得到这个对象后就可以使用百度api中的方法获取或者android中api的办法获取你当前的位置地址,你也可以通过别的办法获取,有时候获取到的位置并不准确这个跟你获取经纬度的方法有关
浏览: 1286105 次
来自: 深圳
google api key v2
新的不能使用
下载下来可以直接运行,也是我想要的
辛苦楼主了
等了一天.终于下载到了百度开放URI API,开发者可零成本调用百度地图 - 互联网 - ITeye资讯
相关知识库:
百度地图近日推出了,即地图开放协议。此举对广大开发者来说,无疑是一个巨大的利好,可实现零成本调用百度地图数据,增强App的位置服务功能,从而提升用户的产品体验,增强用户的使用黏性。
以如今如火如荼的微信为例,其位置分享功能让用户可以看到一个小图,点击后是带标注信息的地图。但如果要查“怎么去”就无法实现了。同样的,在PC端,用户分享的只是一张图片而无法进行任何操作。而开放URI API后,开发者的App在指路、导引等位置服务上就会更加智能,可助其APP在位置服务上实现“在附近搜索、到这里去、从这里出发”等功能,并获取公交站、酒店、餐馆、医院等全方位生活服务信息。
百度地图推URI API之前,开发者如果要实现路线规划、在线导航等功能,其开发成本很高,并不亚于开发一个地图应用。然而缺失地图服务功能后,App的含金量会大大削减,本地化也难以实现,这让开发者陷入了两难境地。“URI API完全解决了开发者的苦恼,让开发者可以专注于应用主体的创意和开发。而和位置相关的服务,通过url文本形式即可对外分享或发送出去。”不少开发者都如此兴奋地表示。
据悉,百度地图是业内首家提供URI API开放接口服务的厂商,如今已吸引了海量开发者的“加盟”。相信随着百度地图服务在广度和深度的不断延伸,将会有越来越多的开发者加入到这一舞台上,在广阔的空间里开发出更具创造性的产品和服务。
百度地图相关负责人表示,移动应用的位置分享、路线规划以及在线导航等问题,一直是困扰着在线地图和第三方应用开发的行业技术难题。百度URI API的发布,可以说是用“共享”的互联网精神,高效地解决了这一行业顽疾。对开发者来说可以零成本的实现APP服务增值,以优质的地图服务吸引更多用户。“今后,百度地图还将积极和业界共享百度的领先技术和优势资源,用开放、共赢的行业合作,有效推动在线地图行业的纵深化、精细化发展”。
免费使用只是第一步战略,一旦市场份额到达一定程度,不是广告就是收费。
每次看到免费的想笑。居然有人会有吃免费大餐这种幻想。 想说,如果保证不倒,或者50年不倒,那我就用。
地圖還有收錢的?
谷歌地图一开始也是零成本的!
不错 !!!
好,一直用百度地图API阅读(7575)
我用的是eclipse,目前这是开发android用的最多的一个工具。
首先需要在百度地图开发平台上下载所需要的文档和功能,由于最新版的3.0.0的不是很熟悉,我这里用的是稍旧一点的版本:2.4.1版的;这里是下载地址:
&下载之后它里面有这样一个压缩文件:
解压开之后是这样的三个压缩包:
其中Sample是它的Demo,解压开之后是这样的:
打开之后里面是各种各样功能的demo;
第一步:将开发包里的lib文件夹整个拷贝,然后粘贴到你的项目文件夹下,覆盖原有的文件,然后是这样的:
第二步:在工程属性-&Java Build Path-&Libraries中选择&Add External JARs&,选定baidumapapi_v2_4_1.jar,确定后返回。
通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。
注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:
1. 在Eclipse 中选中工程,右键选 Properties-&Java Build Path-&Order and Export 使 Android Private Libraries处于勾选状态;
2. Project -& clean-& clean all .
百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见工程配置部分的介绍);
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
&application
&meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" /&
&/application&
(2)添加所需权限
&uses-permission android:name="android.permission.GET_ACCOUNTS" /&
&uses-permission android:name="android.permission.USE_CREDENTIALS" /&&uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /&
&uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /& &uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /&
&uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /& &uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.BROADCAST_STICKY" /&
&uses-permission android:name="android.permission.WRITE_SETTINGS" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
第三步,在布局xml文件中添加地图控件;
&com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" /&
第四步,加载配置项:
  package com.example.
  import com.baidu.mapapi.BMapM
  import com.baidu.mapapi.MKGeneralL
  import com.baidu.mapapi.map.MapC
  import com.baidu.mapapi.map.MapV
  import com.api.basestruct.GeoP
  import android.os.B
  import android.app.A
  import android.view.M
  public class MainActivity extends Activity &implements MKGeneralListener{
    private BMapManager mBMapMan =
    private MapView mMapView =
    private MapController mMapController =
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      mBMapMan = new BMapManager(getApplication());
      mBMapMan.init(this);
      setContentView(R.layout.activity_main);
      // 获取地图控件引用
      mMapView = (MapView) findViewById(R.id.bmapView);
      mMapView.setBuiltInZoomControls(true);//设置缩放
    @Override
    protected void onDestroy() {
      super.onDestroy();
      // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
      mMapView.destroy();
    @Override
    protected void onResume() {
      super.onResume();
      // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
      mMapView.onResume();
    @Override
    protected void onPause() {
      super.onPause();
      // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
      mMapView.onPause();
    @Override
    public void onGetNetworkState(int arg0) {
      // TODO Auto-generated method stub
    @Override
    public void onGetPermissionState(int arg0) {
      // TODO Auto-generated method stub
  最后一步:运行你的app就可以看到百度地图了。
&原文链接:
阅读排行榜查看:7773|回复:2
最有价值午饭
& && &我想很多人都有一个困惑(包括咱们的大版主叮当猫大哥),这个困惑就是不知道在百度地图中怎样获得经纬度。上次简单的跟叮当猫哥说了一下。今天就具体分析一下这个问题。
& &使用百度地图API来获取经纬度坐标。
首先是修改了一点的百度获取经纬度坐标的代码!
package Dagaishang.A[/size][/font][/align]
[font=Helvetica, Tahoma, Arial, sans-serif][size=3][align=left]import java.util.HashM[/align]
[align=left]import java.util.M[/align]
[align=left]import Dagaishang.Android.Utility.CmpD[/align]
[align=left]import android.app.A[/align]
[align=left]import android.content.C[/align]
[align=left]import android.os.B[/align]
[align=left]import android.widget.TextV[/align]
[align=left]import android.location.L[/align]
[align=left]import com.baidu.mapapi.BMapM[/align]
[align=left]import com.baidu.mapapi.LocationL[/align]
[align=left]public class MyLocation extends Activity {[/align]
[align=left]& & // 自己的经纬度坐标[/align]
[align=left]& & private Double myPointX, myPointY;[/align]
[align=left]& & // 计算的两个经纬度之间的距离[/align]
[align=left]& & private Double D[/align]
[align=left]& & LocationListener mLocationListener =// create时注册此listener,Destroy时需要Remove[/align]
[align=left]& & Map&String, Object& myMap = new HashMap&String, Object&();[/align]
[align=left]& & CmpDistance comDis = new CmpDistance();[/align]
[align=left]& & String FriendPx;[/align]
[align=left]& & String FriendPy;[/align]
[align=left]& & protected void onCreate(Bundle savedInstanceState) {[/align]
[align=left]& && &&&super.onCreate(savedInstanceState);[/align]
[align=left]& && &&&setContentView(R.layout.mylocation);[/align]
[align=left]//& && &getLocationByBaidu(&0&, &0&,this);[/align]
[align=left]& & }[/align]
[align=left]& & // FriendPx,FriendPy为好友的经纬度坐标,返回值为计算后的两个坐标的点的距离[/align]
[align=left]& & String getLocationByBaidu(String PointY, String PonitY,Activity tontext) {[/align]
[align=left]& && &&&FriendPx = PointY;[/align]
[align=left]& && &&&FriendPy = PonitY;[/align]
[align=left]& && &&&BMapApiDemoApp app = (BMapApiDemoApp)tontext.getApplication();[/align]
[align=left]& && &&&if (app.mBMapMan == null) {[/align]
[align=left]& && && && &app.mBMapMan = new BMapManager(this.getApplication());[/align]
[align=left]& && && && &app.mBMapMan.init(app.mStrKey,[/align]
[align=left]& && && && && && &&&new BMapApiDemoApp.MyGeneralListener());[/align]
[align=left]& && &&&}[/align]
[align=left]& && &&&app.mBMapMan.start();[/align]
[align=left]& && &&&// 注册定位事件[/align]
[align=left]& && &&&mLocationListener = new LocationListener() {[/align]
[align=left]& && && && &public void onLocationChanged(Location location) {[/align]
[align=left]& && && && && & if (location != null) {[/align]
[align=left]& && && && && && &&&myPointX = location.getLongitude();[/align]
[align=left]& && && && && && &&&myPointY = location.getLatitude();[/align]
[align=left]& && && && && && &&&Distance = comDis.GetLongDistance(myPointX, myPointY,[/align]
[align=left]& && && && && && && && && & Double.valueOf(FriendPx), Double.valueOf(FriendPy));[/align]
[align=left]& && && && && & }[/align]
[align=left]& && && && &}[/align]
[align=left]& && &&&};[/align]
[align=left]& && &&&return String.valueOf(Distance);[/align]
[align=left]& & }[/align]
[align=left]& & protected void onPause() {[/align]
[align=left]& && &&&BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();[/align]
[align=left]& && &&&// 移除listener[/align]
[align=left]& && &&&app.mBMapMan.getLocationManager().removeUpdates(mLocationListener);[/align]
[align=left]& && &&&app.mBMapMan.stop();[/align]
[align=left]& && &&&super.onPause();[/align]
[align=left]& & }[/align]
[align=left]& & protected void onResume() {[/align]
[align=left]& && &&&BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();[/align]
[align=left]& && &&&// 注册Listener[/align]
[align=left]& && &&&app.mBMapMan.getLocationManager().requestLocationUpdates([/align]
[align=left]& && && && && & mLocationListener);[/align]
[align=left]& && &&&app.mBMapMan.start();[/align]
[align=left]& && &&&super.onResume();[/align]
[align=left]& & }[/align]
[align=left]}
& && & 大家明白,其中的getLocationByBaidu()就是我想要使用到的获取经纬度并计算两个点之间距离的方法了,但是其中 if (app.mBMapMan == null) 在其他地方调用的时候会报空指针错误。出现这个错误的原因是什么呢?
是不是因为传递过来的Activity不对或者说这里的getlocation()没有获取到东西?
& && & 经过跟朋友讨论我终于得出了解决方案。
& && & 由代码
if (location != null) {
知道它的调用时肯定不是空的,而
肯定是传的时候就是空的。
对于这个径纬度,我们可以分开做,
取得径纬度不做好,就不要进行下一步,
现只需将此两个变量值当成参数或是用结构体还是啥数据类型都一回事的。
& && &写代码入下
Class VecLoc{[/size][/font][/align]
[font=Helvetica, Tahoma, Arial, sans-serif][size=3][align=left]double latitude =0;//经度[/align]
[align=left]double longitude =0;//纬度[/align]
[align=left]float accuracy =0;//精度[/align]
[align=left]double altitude =0;//海拔[/align]
[align=left]float bearing =0;//方向[/align]
[align=left]float speed =0;//速度[/align]
[align=left]}
关健是能把数据送过去,此处在不在activity里不重要,因为context可以传送。
另外还有一种方法,如果操作过多,你可以建立一个Handler消息通道,在任何地方都可以通过这样来与之通信,特别你有多个类会很实用。
代码入下:
Bundle data = new Bundle();
& & String mTAG = &LocationMessage&;
& & String str=&{\&latitude\&:123,\&longtitude\&:321}&;
& && &&&data.putString(mTAG,str);
& && &&&Message msg = new Message();
& && &&&msg.setData(data);
& && &&&mHandler.sendMessage(msg);
资深技术经理
前个礼拜确实一直在琢磨这个东西,后来看百度地图api有个什么点击事件监听器。注册这个监听器之后,当用户点击/长按/双击地图时都会触发。
然后会把相应的参数,比如经度,纬度之类的传入过来。。
好像和你说的方法有点差别,是不是?:lol1
最有价值午饭
引用:原帖由 rongwei84n 于
19:14 发表
前个礼拜确实一直在琢磨这个东西,后来看百度地图api有个什么点击事件监听器。注册这个监听器之后,当用户点击/长按/双击地图时都会触发。
然后会把相应的参数,比如经度,纬度之类的传入过来。。
好像和你说的方法有点差别 ... 嗯。。。是滴。监听器,有时间试试这个。应该很好玩啊 嘿嘿

我要回帖

更多关于 php api app接口开发 的文章

 

随机推荐