Android实验十之百度地图

来源:互联网 发布:免费的淘宝客助手 编辑:程序博客网 时间:2024/06/07 07:17

实验结果:

 

代码:

MainActivity.java

package com.example.baidumaptest;import java.util.List;import android.app.Activity;import android.content.Context;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.view.Menu;import android.widget.Toast;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;public class MainActivity extends Activity{private MapView mapView;private BaiduMap baiduMap;private LocationManager locationManager;private String provider;private boolean isFirstLocate = true;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.map_view);baiduMap = mapView.getMap();baiduMap.setMyLocationEnabled(true);locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);//获取所有可用的位置提供器List<String> providerList = locationManager.getProviders(true);if(providerList.contains(locationManager.GPS_PROVIDER)){provider = locationManager.GPS_PROVIDER;}else if(providerList.contains(locationManager.NETWORK_PROVIDER)){provider = locationManager.NETWORK_PROVIDER;}else {//当没有可用位置服务器时,弹出Toast提示用户Toast.makeText(this, "No location provider to use", Toast.LENGTH_LONG).show();return ;}Location location = locationManager.getLastKnownLocation(provider);if(location != null){navigateTo(location);}locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);}private void navigateTo(Location location) {// TODO Auto-generated method stubif(isFirstLocate){LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);baiduMap.animateMapStatus(update);update = MapStatusUpdateFactory.zoomTo(16f);baiduMap.animateMapStatus(update);isFirstLocate = false;}MyLocationData.Builder locationBuilder = new MyLocationData.Builder();locationBuilder.latitude(location.getLatitude());locationBuilder.longitude(location.getLongitude());MyLocationData locationData = locationBuilder.build();baiduMap.setMyLocationData(locationData);}LocationListener locationListener = new  LocationListener() {@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// TODO Auto-generated method stub}@Overridepublic void onProviderEnabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onLocationChanged(Location location) {// TODO Auto-generated method stub//更新当前设备的位置信息if(location != null){navigateTo(location);}}};protected void onDestroy(){super.onDestroy();mapView.onDestroy();baiduMap.setMyLocationEnabled(false);if(locationManager != null){//关闭程序时将监听移除locationManager.removeUpdates(locationListener);}}protected void onPause(){super.onPause();mapView.onPause();}protected void onResume(){super.onResume();mapView.onResume();}@Overridepublic boolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_height="match_parent"    android:layout_width="match_parent"    >        <com.baidu.mapapi.map.MapView        android:id="@+id/map_view"        android:layout_height="match_parent"        android:layout_width="match_parent"        android:clickable="true"        />               </LinearLayout>


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.baidumaptest"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="18" />    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <uses-permission android:name="android.permission.INTERNET"/>        <uses-permission android:name="com.android.launcher.perimission.READ_ETTINGS"/>        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.BROADCAST_STICKY"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.BROADCAST_STICKY"/>    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.example.baidumaptest.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>                <meta-data             android:name="com.baidu.lbsapi.API_KEY"            android:value="MPvHOsVXiNi2OSCNUkne35x61yBgCbAZ"/>    </application></manifest>


 

 

总结:

 

在使用baiduMap时需要特别注意,要申请API Key,如下图:SHA1要与eclipse中的相同,否则不可用。

我在教室申请的API Key,在教室中可以成功运行。但把文件包复制到自己电脑上时,出现了一下错误:

 

解决方法 :重新申请ak,注意变更SHA1,更发fest文件中的对应key,便可以直接运行。

 

0 0