在fragment中使用百度地圖


【寫在前面的話:關於大家的說的下載要10個e幣的問題,我不知道怎么可以設置成任意數目(汗……),如果有需要的但e幣不夠的朋友,可以留下郵箱,我抽空給你們發過去(2013-12-23 19:08)】 
- - - - - - - - - - - - - - -- - - - - - - - - - - - - 分 - - - - - 割 - - - - - 線- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
使用最新版本的百度地圖需要注意的幾個地方:
1、libs文件夾下要有android-support-v4.jar、baidumapapi_v2_1_0.jar、locSDK_3.1.jar三個jar包和armeabi文件夾。詳見下圖:
 

2、布局文件要寫成<com.baidu.mapapi.map.MapView />,舊版本是寫作<com.baidu.mapapi.MapView />的。
3、AndroidMainfest這個配置文件要把該添加的東西都加上。比如各種權限、比如屏幕支持、比如百度地圖服務

<service        android:name="com.baidu.location.f" 
                    android:enabled="true"                       
                    android:process=":remote">
</service>

4、不要忘了申請自己的密鑰。
……時間有限,就寫這么多吧,遇到問題就百度一下,基本上也就解決了。
噢,附上自己的demo和各個鏈接。
百度地圖API>Android SDK>相關下載  sdk下載  (http://developer.baidu.com/map/sdkandev-download.htm )
百度地圖API>Android SDK>申請Key  申請key的鏈接  (http://developer.baidu.com/map/android-mobile-apply-key.htm)
百度地圖API>定位 SDK>Android 定位SDK> 定位sdk的鏈接 (http://developer.baidu.com/map/geosdk-android-download.htm)


對了,還有效果圖
   

- - - - - - - - - - -- - - - - - - - - - -分 割 線 -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -
【補充—2013-12-10 18:48】
1、代碼結構:
    
2、各個類的大致作用:
    (1) Cheeses.java  填充沒有用到的Fragment的內容
    (2) DemoApplication.java  從百度地圖sdk demo中直接拿來的;主要用來處理與key相關的操作
    (3) MainActivity.java  實現適配器,完成不同Fragment之間的切換
    (4) MapFragment.java  定位相關的操作
3、附上主要類的源碼:
    (1) MainActivity.java

代碼片段,雙擊復制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.ListFragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
 
public class MainActivity extends FragmentActivity {
    static final int NUM_ITEMS = 10 ;
 
    MyAdapter mAdapter;
 
    ViewPager mPager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
         mAdapter = new MyAdapter(getSupportFragmentManager());
 
         mPager = (ViewPager)findViewById(R.id.pager);
         mPager.setAdapter(mAdapter);
 
    }
 
    public static class MyAdapter extends FragmentPagerAdapter {
         public MyAdapter(FragmentManager fm) {
             super (fm);
         }
 
         @Override
         public int getCount() {
             return NUM_ITEMS;
         }
 
         @Override
         public Fragment getItem( int position) {
                if (position == 0 ) {
                                 return MapFragment.newInstance();
                         } else {
                     return ArrayListFragment.newInstance(position);
                         }
         }
    }
 
    public static class ArrayListFragment extends ListFragment {
         int mNum;
 
         /**
          * Create a new instance of CountingFragment, providing "num"
          * as an argument.
          */
         static ArrayListFragment newInstance( int num) {
             ArrayListFragment f = new ArrayListFragment();
 
             // Supply num input as an argument.
             Bundle args = new Bundle();
             args.putInt( "num" , num);
             f.setArguments(args);
 
             return f;
         }
 
         /**
          * When creating, retrieve this instance's number from its arguments.
          */
         @Override
         public void onCreate(Bundle savedInstanceState) {
             super .onCreate(savedInstanceState);
             mNum = getArguments() != null ? getArguments().getInt( "num" ) : 1 ;
         }
 
         /**
          * The Fragment's UI is just a simple text view showing its
          * instance number.
          */
         @Override
         public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
             View v = inflater.inflate(R.layout.fragment_pager_list, container, false );
             View tv = v.findViewById(R.id.text);
             ((TextView)tv).setText( "Fragment #" + mNum);
             return v;
         }
 
         @Override
         public void onActivityCreated(Bundle savedInstanceState) {
             super .onActivityCreated(savedInstanceState);
             setListAdapter( new ArrayAdapter<String>(getActivity(),
                     android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings));
         }
 
         @Override
         public void onListItemClick(ListView l, View v, int position, long id) {
             Log.i( "FragmentList" , "Item clicked: " + id);
         }
    }
}



    (2)  MapFragment.java
代碼片段,雙擊復制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class MapFragment extends Fragment {
 
    static MapView mMapView = null ;
    private MapController mMapController = null ;
 
    // 定位相關
         LocationClient mLocClient;
    public MyLocationListenner myListener = new MyLocationListenner();
    MyLocationOverlay myLocationOverlay = null ;
    LocationData locData = null ;
 
    static MapFragment newInstance() {
         MapFragment f = new MapFragment();
         return f;
    }
 
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
         super .onActivityCreated(savedInstanceState);
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         DemoApplication app = (DemoApplication) getActivity().getApplication();
         if (app.mBMapManager == null ) {
             app.mBMapManager = new BMapManager(getActivity());
             app.mBMapManager.init(DemoApplication.strKey, new DemoApplication.MyGeneralListener());
         }
 
         // LocationClient just init once;
         // start() is moved
         mLocClient = new LocationClient(getActivity());
 
         LocationClientOption option = new LocationClientOption();
         option.setOpenGps( true ); // 打開gps
         option.setCoorType( "bd09ll" ); // 設置坐標類型      
//        option.setScanSpan(5000);        //設置發起定位請求的間隔時間,單位毫秒
 
         mLocClient.setLocOption(option);
 
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View v = inflater.inflate(R.layout.activity_locationoverlay, container, false );
 
         mMapView = (MapView) v.findViewById(R.id.bmapView);
         mMapController = mMapView.getController();
         mMapView.getController().setZoom( 14 );
         mMapView.getController().enableClick( true );
         mMapView.setBuiltInZoomControls( true );
 
         myLocationOverlay = new MyLocationOverlay(mMapView);
         locData = new LocationData();
         myLocationOverlay.setData(locData);
         mMapView.getOverlays().add(myLocationOverlay);
         myLocationOverlay.enableCompass();
         mMapView.refresh();
         return v;
    }
 
    /**
      * 監聽函數,有新位置的時候,格式化成字符串,輸出到屏幕中
      */
    public class MyLocationListenner implements BDLocationListener {
         @Override
         public void onReceiveLocation(BDLocation location) {
             if (location == null )
                return ;
             costTime = System.currentTimeMillis() - startTime;
             Log.d( "MapFragment" , "" + costTime);
             locData.latitude = location.getLatitude();
             locData.longitude = location.getLongitude();
             locData.accuracy = location.getRadius();
             locData.direction = location.getDerect();
             myLocationOverlay.setData(locData);
             mMapView.refresh();
             mMapController.animateTo( new GeoPoint(( int ) (locData.latitude * 1e6), ( int ) (locData.longitude * 1e6)));
             // if request location success , stop it
             stopRequestLocation();
         }
 
         public void onReceivePoi(BDLocation poiLocation) {
             if (poiLocation == null ) {
                return ;
             }
         }
    }
 
    /**
      * warning: this method is callback by activity manager; Be careful it's
      * lifecycle : It is called after oncreate , before oncreateview; see
      * detail:
      * http://developer.android.com/reference/android/support/v4/app/Fragment
      * .html#setUserVisibleHint(boolean)
      */
    @Override
    public void setUserVisibleHint( boolean isVisibleToUser) {         //核心方法,避免因Fragment跳轉導致地圖崩潰
         super .setUserVisibleHint(isVisibleToUser);
         if (isVisibleToUser == true ) {
             // if this view is visible to user, start to request user location
             startRequestLocation();
         } else if (isVisibleToUser == false ) {
             // if this view is not visible to user, stop to request user
             // location
             stopRequestLocation();
         }
    }
 
    private void stopRequestLocation() {
         if (mLocClient != null ) {
             mLocClient.unRegisterLocationListener(myListener);
             mLocClient.stop();
         }
    }
 
    long startTime;
    long costTime;
 
    private void startRequestLocation() {
         // this nullpoint check is necessary
         if (mLocClient != null ) {
             mLocClient.registerLocationListener(myListener);
             mLocClient.start();
             mLocClient.requestLocation();
             startTime = System.currentTimeMillis();
         }
    }
 
    @Override
    public void onPause() {
         mMapView.onPause();
         super .onPause();
    }
 
    @Override
    public void onResume() {
         mMapView.onResume();
         super .onResume();
    }
 
    @Override
    public void onDestroy() {
         if (mLocClient != null )
             mLocClient.stop();
         mMapView.destroy();
         super .onDestroy();
    }
 
    @Override
    public void onSaveInstanceState(Bundle outState) {
         super .onSaveInstanceState(outState);
         mMapView.onSaveInstanceState(outState);
 
    }
 
}


【ps:百度開發者中心做了很大的改動,關於key的獲取,請關注百度相關的說明】







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM