Android--------------百度地图

1.首先注册一个百度地图开发者账号,获取**

Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key

官方介绍申请**网址为:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key

获取开发版SHA1的方法:

第1步:运行进入控制台

第2步:定位到.android文件夹下,输入cd .android

第3步:输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(**口令是android),例如:

其中keytool为jdk自带工具;keystorefile为Android 签名证书文件

2.得到发布版SHA1**

第一步:打开Android studio 找到 Build------Generate  Signed APK...---------------Create  new(选择好生成Key的jks文件路径,方便获取**)------------选择APK所在的路径为该项目build下的outputs文件夹,选择release发布版,点击完成既可。

第二部:通过命令行根据刚才生成Key的jks文件路径获得**:keytool -v -list -keystore 文件名 (自己定义好的.jks文件名),你要口令为第一步设置的密码。

在百度地图创建应用时 应用名称为:values------strings里面的应用名称名;包名为build.gradle里面的包名。

3.提交百度地图的创建应用可以得到最后想要得到的AK

4.配置环境及发布

第一步:在百度地图开放平台的相关下载去下载Android地图SDK

第二步:把下载下来的各个文件粘贴到Android studio的libs包下,工程配置还需要把jar包集成到自己的工程中,如图上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明

5.在AndroidManifest中添加开发**、所需权限等信息:

1)在application中添加开发**


    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="创建完百度地图应用后得到的AK值" />

2)添加所需权限

<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.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

3)在build.gradle中的buildTypes中加入:
sourceSets { main() { jniLibs.srcDirs = ['libs'] } }


3)在布局xml文件中添加地图控件;

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

4)在应用程序创建时初始化 SDK引用的Context 全局变量:

public class MainActivityextends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);//在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main);} }

注意:在SDK各功能组件使用之前都需要调用

SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中


5)创建地图Activity,管理地图生命周期;

public class MainActivity extends Activity {  
    MapView mMapView = null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
        //获取地图控件引用  
        mMapView = (MapView) findViewById(R.id.bmapView);  
    }  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        //在activity执行onDestroy时执行mMapView.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();  
        }  
    }

6.完成以上步骤就可以展示出一个基本的地图

Android--------------百度地图




----------------------------------------------------------------------------------------------------------

定位:

参考文档:http://blog.****.net/ssh159/article/details/68940607?locationNum=10&fps=1

 private static final String TAG ="////////" ;
    private MapView bmapView;
    private BaiduMap mBaiduMap;
    private LocationClient mLocClient;
    private boolean isFirstLoc = true;
    public MyLocationListenner myListener = new MyLocationListenner();
    private String addrStr;
    private TextView hello;

    /**
     * 定位SDK监听函数
     */
    public class MyLocationListenner implements BDLocationListener {


        @Override
        public void onReceiveLocation(BDLocation location) {
            // map view 销毁后不在处理新接收的位置
            if (location == null || bmapView == null) {
                return;
            }

            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    // 此处设置开发者获取到的方向信息,顺时针0-360
                    .direction(100).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);

            //是否是第一次定位
            if (isFirstLoc) {
                isFirstLoc = false;
                LatLng ll = new LatLng(location.getLatitude(),
                        location.getLongitude());
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(ll).zoom(18.0f);
                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
            }
                if (mLocClient.isStarted()) {
                    // 获得位置之后停止定位
                    Log.i(TAG, "address://///////" +location.getAddrStr() );
                    hello.setText(location.getAddrStr());
                }
//            addrStr = location.getAddrStr();
//            hello.setText(addrStr);
            Log.i(TAG, "address://////////////////////////////////////////////////////////" +location.getAddrStr() );

        }


        public void onReceivePoi(BDLocation poiLocation) {
        }

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        bmapView = (MapView) findViewById(R.id.bmapview);
        hello = (TextView) findViewById(R.id.hello);
        mBaiduMap = bmapView.getMap();
        mBaiduMap.setMyLocationEnabled(true);
        // 定位初始化
        mLocClient = new LocationClient(this);
        mLocClient.registerLocationListener(myListener);
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);
        option.setIsNeedAddress(true); //可选,设置是否需要地址信息,默认不需要
        mLocClient.setLocOption(option);
        mLocClient.start();
    }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
            bmapView.onDestroy();
        }
        @Override
        protected void onResume() {
            super.onResume();
            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
            bmapView.onResume();
        }
        @Override
        protected void onPause() {
            super.onPause();
            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
            bmapView.onPause();
        }