Android調用百度地圖API實現——實時定位代碼

使用代碼如下:
MainActivity.class

package yu.hong.map;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKLocationManager;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.MyLocationOverlay;
import android.location.Location;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends MapActivity {
// 初始爲於勉莊
private double userLongitude = 33.49087222349736 * 1E6;// 緯度
private double userLatitude = 115.27130064453128 * 1E6;// 經度
// 添加百度相關控件
private MapView mapView;
private BMapManager bMapManager;// 加載地圖的引擎
// 百度地圖上的key值
private String keyString = "01331AFA954E7E300428A5F0C9C829E0E16F87A3";
// 在百度地圖上添加一些控件,例如放大、縮小
private MapController mapController;
private MKLocationManager mLocationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 實例化控件
mapView = (MapView) this.findViewById(R.id.bmapView);
bMapManager = new BMapManager(MainActivity.this);
// 必須要加載key
bMapManager.init(keyString, new MKGeneralListener() {
// key值不正確
@Override
public void onGetPermissionState(int arg0) {
if (arg0 == 300) {
Toast.makeText(MainActivity.this, R.string.key_error,
Toast.LENGTH_LONG).show();
}
}
//網絡出錯
@Override
public void onGetNetworkState(int arg0) {
Toast.makeText(MainActivity.this, R.string.net_error,
Toast.LENGTH_LONG).show();
}
});
this.initMapActivity(bMapManager);
mapView.setBuiltInZoomControls(true);// 表示可以設置縮放功能
mapController = mapView.getController();
// 初始化Location模塊
mLocationManager = bMapManager.getLocationManager();
// 通過enableProvider和disableProvider方法,選擇定位的Provider
mLocationManager.enableProvider(MKLocationManager.MK_NETWORK_PROVIDER);
mLocationManager.disableProvider(MKLocationManager.MK_GPS_PROVIDER);
//返回手機位置
mLocationManager.requestLocationUpdates(locationListener);
mLocationManager.setNotifyInternal(5, 2);
// 添加定位圖層
MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this,
mapView);
myLocationOverlay.enableMyLocation(); // 啓用定位
myLocationOverlay.enableCompass(); // 啓用指南針
mapView.getOverlays().add(myLocationOverlay);
mapView.setTraffic(true);// 交通地圖
// mapView.setSatellite(true);// 衛星地圖
mapController.setZoom(15);// 設置縮放級別
mapView.invalidate();// 刷新地圖
}
//獲取經度緯度
private LocationListener locationListener = new LocationListener() {  
@Override
public void onLocationChanged(Location location) {
if (location != null) {  
userLatitude = location.getLatitude() * 1E6;  
                userLongitude = location.getLongitude() * 1E6;
                GeoPoint mypoint = new GeoPoint((int)(userLatitude), (int)(userLongitude));
                mapView.getController().animateTo(mypoint);  
            }
}
};
// 銷燬
@Override
protected void onDestroy() {
super.onDestroy();
if (bMapManager != null) {
bMapManager.destroy();
bMapManager = null;
}
}
// 停止
@Override
protected void onPause() {
super.onPause();
if (bMapManager != null) {
mLocationManager.removeUpdates(locationListener);
bMapManager.stop();
}
}
// 重啓
@Override
protected void onResume() {
super.onResume();
if (bMapManager != null) {
bMapManager.start();
}
}
//
@Override
protected boolean isRouteDisplayed() {
return false;
}
// Menu
// 當點擊Menu按鈕時,調用該方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, R.string.exit).setIcon(
android.R.drawable.ic_menu_close_clear_cancel);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) { // 選中某個菜單項
if (item.getItemId() == 1) {
MainActivity.this.finish();  
}
return super.onOptionsItemSelected(item);
}
// 返回鍵  
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {       
                finish();  
}
return super.onKeyDown(keyCode, event);
}
}
activity_mainmain.xml
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <!-- 添加顯示百度地圖的控件 -->
    <com.baidu.mapapi.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        tools:context=".MainActivity" />
</LinearLayout>

AndroidManifest.xml

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="yu.hong.map"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="15" />
    <!--添加百度地圖開發授權  -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--添加對屏幕的支持  -->
    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true" />
    <application
        android:icon="@drawable/ic_maplauncher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

轉載地址:http://blog.sina.com.cn/s/blog_6e334dc7010160p9.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章