Android应用百度地图开发定位的问题,新手求大神帮忙看下

原创 2017年01月02日 13:13:31
本人应届生,在公司上班,因为开发需要,我就去百度地图开放平台学习下百度地图Android 定位SDK 的定位功能,然后我就写了一段能显示地图加定位自己当前位置的代码。为什么我的程序,定位的位置确是太平洋的里面,而不是我当前的位置啊,然后求大神帮忙看看哪里出问题了,顺便帮我想想怎么能定位的点显示“经度纬度”,而且我如果移动一段距离能看到我开始位置到停止位置的轨迹。本人初学者,最好给点代码解释下?谢谢了
ps:采用的都是百度地图最新的Android SDK  v.2.4.1   Android 定位Sdk
代码:
AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.blunt.demo"
    android:versionCode="1"
    android:versionName="1.0" >
     <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true" />

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="14" />
    <!-- 使用网络功能所需权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
    </uses-permission>
    <!-- SDK离线地图和cache功能需要读写外部存储器 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" >
    </uses-permission>
    <!-- 获取设置信息和详情页直接拨打电话需要以下权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.CALL_PHONE" >
    </uses-permission>
    <!-- 使用定位功能所需权限,demo已集成百度定位SDK,不使用定位功能可去掉以下6项 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>

    <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </permission>

    <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_GPS" />

    <application
        
        
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
        <activity
            android:name="com.blunt.demo.MyMapActivity"
            android:configChanges="orientation|keyboardHidden"
            android:label="@string/app_name"
            android:screenOrientation="sensor" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="密钥保密" />
        <service 
            android:name="com.baidu.location.f" 
            android:enabled="true" 
            android:process=":remote"/>
            
      </application>

   </manifest>


主Activity


public class MyMapActivity extends Activity

{
private static final String TAG = "TAG";

BMapManager mBMapMan = null;
MapView mMapView = null;

// 获取地点位置信息
private LocationClient locationClient = null;
private BDLocationListener bdLocationListener = new MyLocationListener();

// 定位到当前位置

private MyLocationOverlay myLocationOverlay = null;
private LocationData locationData = null;

Handler mHandler = new Handler()
{
public void handleMessage(android.os.Message msg)
{
Toast.makeText(getApplicationContext(), "msg:" + msg.what,
Toast.LENGTH_SHORT).show();
};
};

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mBMapMan = new BMapManager(getApplication());
mBMapMan.init(null);

// 注意:请在试用setContentView前初始化BMapManager对象,否则会报错
setContentView(R.layout.activity_my_map);
mMapView = (MapView) findViewById(R.id.bmapsView);
mMapView.setBuiltInZoomControls(true);
// 设置启用内置的缩放控件
MapController mMapController = mMapView.getController();

locationClient = new LocationClient(getApplicationContext());
locationClient.registerLocationListener(bdLocationListener);

LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 是否打开GPRS
option.setAddrType("all");// 返回的定位结果包含地址信息
option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(50000);// 设置发起定位请求的间隔时间为5000ms
option.disableCache(true);// 禁止启用缓存定位
option.setPoiNumber(5); // 最多返回POI个数
option.setPoiDistance(1000); // poi查询距离
option.setPriority(LocationClientOption.NetWorkFirst);
locationClient.setLocOption(option);
locationClient.start();
if (locationClient != null && locationClient.isStarted())
{
locationClient.requestLocation();
locationClient.requestPoi();
} else
{
Log.d(TAG, "locClient is null or not started");
}

mMapController.setZoom(12);// 设置地图zoom级别

myLocationOverlay = new MyLocationOverlay(mMapView);
locationData = new LocationData();
myLocationOverlay.setData(locationData);
mMapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableCompass();
mMapView.refresh();

}




@Override
protected void onStop()
{
locationClient.stop();
super.onStop();
}

@Override
protected void onDestroy()
{

mMapView.destroy();
locationClient.unRegisterLocationListener(bdLocationListener);

if (mBMapMan != null)
{
mBMapMan.destroy();
mBMapMan = null;
}
locationClient.stop();
myLocationOverlay.disableCompass();
myLocationOverlay = null;
mMapView = null;
locationClient = null;
locationData = null;
super.onDestroy();
}

@Override
protected void onPause()
{

mMapView.onPause();
if (mBMapMan != null)
{
mBMapMan.stop();
}
locationClient.stop();

super.onPause();
}

@Override
protected void onResume()
{

mMapView.onResume();
if (mBMapMan != null)
{
mBMapMan.start();
}
locationClient.start();
super.onResume();
}

private class MyLocationListener implements BDLocationListener
{

@Override
public void onReceiveLocation(BDLocation location)
{
// Log.v(TAG,
// "onReceiveLocation--->getLatitude--->"+String.valueOf(position.getLatitude()))
// ;
// Log.v(TAG,
// "onReceiveLocation--->getLocType--->"+String.valueOf(position.getLongitude()))
// ;
// Log.v(TAG,
// "onReceiveLocation--->getRadius--->"+String.valueOf(position.getRadius()))
// ;
// Log.v(TAG,
// "onReceiveLocation--->position--->"+String.valueOf(position.getAddrStr()))
// ;

locationData.latitude  = location.getLatitude();
locationData.longitude = location.getLongitude();
locationData.accuracy  = location.getRadius();
locationData.direction = location.getDerect();
myLocationOverlay.setData(locationData);
mMapView.refresh();
mMapView.getController().animateTo(
new GeoPoint((int) (locationData.latitude * 1e6),
(int) (locationData.longitude * 1e6)),
mHandler.obtainMessage(1));

}

@Override
public void onReceivePoi(BDLocation location)
{
locationData.latitude = location.getLatitude();  

locationData.longitude = location.getLongitude();  

}

}
}

收藏助手
不良信息举报
您举报文章:Android应用百度地图开发定位的问题,新手求大神帮忙看下
举报原因:
原因补充:

(最多只允许输入30个字)