zoukankan      html  css  js  c++  java
  • 在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的获取,请关注百度相关的说明】






  • 相关阅读:
    Spring Web Flow 2.0 入门详解
    Hadoop单机部署方法
    hadoop单机版搭建图文详解
    MapReduce算法设计Think in Hadoop
    开发 Spring 自定义视图和视图解析器
    HashMap的实现原理
    MapReduce算法模式
    LinkedHashMap的实现原理
    hadoop 2.0 详细配置教程
    电子商务网站之购买欲望和购买目标
  • 原文地址:https://www.cnblogs.com/wsfjlagr/p/3489587.html
Copyright © 2011-2022 走看看