在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;
相关文章
相关标签/搜索