android 實現百度地圖app,android百度地圖app

來源:互聯網
上載者:User

android 實現百度地圖app,android百度地圖app

以百度api為基礎

複製

<com.baidu.mapapi.map.MapView      android:id="@+id/bmapView"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:clickable="true" />

要定義的變數

private BaiduMap mBaiduMap;    private MapView mMapView;    private LocationClient mLocationClient;    private boolean isFirstIn = true;

初始化

mMapView= (MapView) findViewById(R.id.bmapView);        mBaiduMap = mMapView.getMap();

各部分實現的功能
1.

//在使用SDK各組件之前初始化context資訊,傳入ApplicationContext          //注意該方法要再setContentView方法之前實現          SDKInitializer.initialize(getApplicationContext());  

把地圖的生命週期和activity的生命週期綁定起來

@Override    protected void onStart() {        super.onStart();        mBaiduMap.setMyLocationEnabled(true);        if(!mLocationClient.isStarted())        mLocationClient.start();    }    @Override    protected void onStop() {        // TODO Auto-generated method stub        super.onStop();    }    @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        mMapView.onDestroy();    }    @Override      protected void onResume() {          super.onResume();          //在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理          mMapView.onResume();          }      @Override      protected void onPause() {          super.onPause();          //在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理          mMapView.onPause();          }  

實現option點擊轉換地圖模式

@Override        public boolean onCreateOptionsMenu(Menu menu) {            // TODO Auto-generated method stub            menu.add(0, 1, 0, "普通地圖");            menu.add(0, 2, 0, "衛星地圖");            menu.add(0, 3, 0, "即時交通(off)");            return super.onCreateOptionsMenu(menu);                 }

設定option的點擊事件

@Override        public boolean onOptionsItemSelected(MenuItem item) {            switch (item.getItemId()) {            case 1:                //普通地圖                  mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);                  break;            case 2:                 //衛星地圖                  mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);                break;            case 3:                             if(mBaiduMap.isTrafficEnabled()){                    mBaiduMap.setTrafficEnabled(false);                    item.setTitle("即時交通(off)");                }else{                    mBaiduMap.setTrafficEnabled(true);                    item.setTitle("即時交通(on)");                }                break;            }                       return super.onOptionsItemSelected(item);               }

在地圖上添加標識物

//定義Maker座標點          LatLng point = new LatLng(39.963175, 116.400244);          //構建Marker表徵圖          BitmapDescriptor bitmap = BitmapDescriptorFactory              .fromResource(R.drawable.ic_launcher);          //構建MarkerOption,用於在地圖上添加Marker          OverlayOptions option = new MarkerOptions()              .position(point)              .icon(bitmap);          //在地圖上添加Marker,並顯示          mBaiduMap.addOverlay(option);         

設定gps定位
要用到的類
LocationClient
BDLocationListener

(1)

MyLocationListener myLocationListener = new MyLocationListener();       mLocationClient = new LocationClient(getApplicationContext());     //聲明LocationClient類        mLocationClient.registerLocationListener(myLocationListener);    //註冊監聽函數  

(2)利用LocationClientOption 設定定位的屬性

LocationClientOption option = new LocationClientOption();        option.setLocationMode(LocationMode.Hight_Accuracy);//設定定位元模式        option.setCoorType("bd09ll");//返回的定位結果是百度經緯度,預設值gcj02        option.setScanSpan(1000);//設定發起定位請求的間隔時間為5000ms        option.setIsNeedAddress(true);//返回的定位結果包含地址資訊        option.setNeedDeviceDirect(true);//返回的定位結果包含手機機頭的方向        mLocationClient.setLocOption(option);

(3)監聽器的實現

    private class MyLocationListener implements BDLocationListener{            @Override            public void onReceiveLocation(BDLocation location) {                // TODO Auto-generated method stub                MyLocationData data = new MyLocationData.Builder()                //設定經緯度                .accuracy(location.getRadius())                .latitude(location.getLatitude())                .longitude(location.getLongitude())                .build();                mBaiduMap.setMyLocationData(data);            //判斷第一次進入,定位到目前所在位置            if(isFirstIn){                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());                MapStatusUpdate msu =MapStatusUpdateFactory.newLatLng(latLng);                mBaiduMap.animateMapStatus(msu);                Toast.makeText(getApplicationContext(), location.getAddrStr(),3000).show();                isFirstIn = false;            }                       }          }

所要加的許可權

    <!-- 這個許可權用於進行網路定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><!-- 這個許可權用於訪問GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><!-- 用於訪問wifi網路資訊,wifi資訊會用於進行網路定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!-- 擷取電訊廠商資訊,用於支援提供電訊廠商資訊相關的介面--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!-- 這個許可權用於擷取wifi的擷取許可權,wifi資訊會用來進行網路定位--><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" /><!-- SD卡讀取許可權,使用者寫入離線定位元據--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission><!--允許應用讀取低層級的系統記錄檔 --><uses-permission android:name="android.permission.READ_LOGS"></uses-permission>    <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" />

所要在application聲明的

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.