在fragment中使用百度地圖

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

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

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

四、不要忘了申請本身的密鑰。
……時間有限,就寫這麼多吧,遇到問題就百度一下,基本上也就解決了。
噢,附上本身的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) Cheeses.java  填充沒有用到的Fragment的內容
    (2) DemoApplication.java  從百度地圖sdk demo中直接拿來的;主要用來處理與key相關的操做
    (3) MainActivity.java  實現適配器,完成不一樣Fragment之間的切換
    (4) MapFragment.java  定位相關的操做
三、附上主要類的源碼:
    (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;
相關文章
相關標籤/搜索