实验6:Android地图定位-百度地图上定位自己所在的位置

来源:互联网 发布:怎样创建企业域名 编辑:程序博客网 时间:2024/06/11 17:48

主要的比较麻烦的地方是出在jar,so文件的导入与LocationManager的使用

效果图:

                                                              


源码:

MainActivity:


  1. import android.app.Activity;  
  2. import android.content.Context;  
  3. import android.location.Location;  
  4. import android.location.LocationListener;  
  5. import android.location.LocationManager;  
  6. import android.os.Bundle;  
  7. import android.widget.Toast;  
  8.   
  9.   
  10. import com.baidu.mapapi.SDKInitializer;  
  11. import com.baidu.mapapi.map.BaiduMap;  
  12. import com.baidu.mapapi.map.MapStatusUpdate;  
  13. import com.baidu.mapapi.map.MapStatusUpdateFactory;  
  14. import com.baidu.mapapi.map.MapView;  
  15. import com.baidu.mapapi.map.MyLocationConfiguration;  
  16. import com.baidu.mapapi.map.MyLocationData;  
  17. import com.baidu.mapapi.model.LatLng;  
  18.   
  19. import java.util.List;  
  20.   
  21. public class MainActivity extends Activity {  
  22.   
  23.     private MapView mapView;  
  24.     private BaiduMap baiduMap;  
  25.     private LocationManager locationManager;  
  26.     private  String provider;  
  27.     private boolean isFirstLocate =true;  
  28.   
  29.     @Override  
  30.     protected void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         SDKInitializer.initialize(getApplicationContext());  
  33.         setContentView(R.layout.activity_main);  
  34.         mapView = (MapView) findViewById(R.id.map_view);  
  35.         baiduMap=mapView.getMap();  
  36.         //设置位置提供器  
  37.         setLovationManager();  
  38.         //将显示位置的功能开启  
  39.         baiduMap.setMyLocationEnabled(true);  
  40.     }  
  41.   
  42.     private void setLovationManager() {  
  43.         locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);  
  44.         //获取所有可用的位置提供器  
  45.         List<String> providerList=locationManager.getProviders(true);  
  46.         if(providerList.contains(LocationManager.GPS_PROVIDER)){  
  47.             provider=LocationManager.GPS_PROVIDER;  
  48.         }else if(providerList.contains(LocationManager.NETWORK_PROVIDER)){  
  49.             provider=LocationManager.NETWORK_PROVIDER;  
  50.         }else {  
  51.             //当前没有可用的位置提供器时,弹出Toast提示  
  52.             Toast.makeText(this,"没有可用的位置提供器",Toast.LENGTH_SHORT).show();  
  53.             return;  
  54.         }  
  55.         Location location=locationManager.getLastKnownLocation(provider);  
  56.         if(location!=null){  
  57.             navigateTo(location);  
  58.         }  
  59.   
  60.         locationManager.requestLocationUpdates(provider,5000,5,locationListener);  
  61.     }  
  62.   
  63.     private void navigateTo(Location location) {  
  64.         //如果是第一次创建,就获取位置信息并且将地图移到当前位置  
  65.         //为防止地图被反复移动,所以就只在第一次创建时执行  
  66.         if(isFirstLocate){  
  67.             //LatLng对象主要用来存放经纬度  
  68.             //zoomTo是用来设置百度地图的缩放级别,范围为3~19,数值越大越精确  
  69.             LatLng ll=new LatLng(location.getLatitude(),location.getLongitude());  
  70.             MapStatusUpdate update= MapStatusUpdateFactory.newLatLng(ll);  
  71.             baiduMap.animateMapStatus(update);  
  72.             update=MapStatusUpdateFactory.zoomTo(16f);  
  73.             baiduMap.animateMapStatus(update);  
  74.             isFirstLocate=false;  
  75.         }  
  76.   
  77.         //封装设备当前位置并且显示在地图上  
  78.         //由于设备在地图上显示的位置会根据我们当前位置而改变,所以写到if外面  
  79.         MyLocationData.Builder locationBuilder=new MyLocationData.Builder();  
  80.         locationBuilder.latitude(location.getLatitude());  
  81.         locationBuilder.longitude(location.getLongitude());  
  82.         MyLocationData locationData=locationBuilder.build();  
  83.         baiduMap.setMyLocationData(locationData);  
  84.     }  
  85.   
  86.     LocationListener locationListener =new LocationListener() {  
  87.         @Override  
  88.         public void onLocationChanged(Location location) {  
  89.             if(locationManager!=null)  
  90.                 navigateTo(location);  
  91.         }  
  92.   
  93.         @Override  
  94.         public void onStatusChanged(String s, int i, Bundle bundle) {  
  95.   
  96.         }  
  97.   
  98.         @Override  
  99.         public void onProviderEnabled(String s) {  
  100.   
  101.         }  
  102.   
  103.         @Override  
  104.         public void onProviderDisabled(String s) {  
  105.   
  106.         }  
  107.     };  
  108.   
  109.     @Override  
  110.     protected void onDestroy() {  
  111.         super.onDestroy();  
  112.         //最后要销毁mapView  
  113.         //关闭程序时将监听器移除  
  114.         //关闭可以显示位置的功能  
  115.         mapView.onDestroy();  
  116.         if(locationManager!=null){  
  117.             locationManager.removeUpdates(locationListener);  
  118.         }  
  119.         baiduMap.setMyLocationEnabled(false);  
  120.     }  
  121.   
  122.     @Override  
  123.     protected void onPause() {  
  124.         super.onPause();  
  125.         mapView.onPause();  
  126.     }  
  127.   
  128.     @Override  
  129.     protected void onResume() {  
  130.         super.onResume();  
  131.         mapView.onResume();  
  132.     }  

activity_main:


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:paddingBottom="@dimen/activity_vertical_margin"  
  6.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  7.     android:paddingRight="@dimen/activity_horizontal_margin"  
  8.     android:paddingTop="@dimen/activity_vertical_margin"  
  9.     >  
  10.     <com.baidu.mapapi.map.MapView  
  11.         android:id="@+id/map_view"  
  12.         android:layout_width="match_parent"  
  13.         android:layout_height="match_parent"  
  14.         android:clickable="true">  
  15.   
  16.     </com.baidu.mapapi.map.MapView>  
  17.   
  18. </LinearLayout>
Androidmanifest:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.example.baidumaptest2">  
  4.   
  5.     <application  
  6.         android:allowBackup="true"  
  7.         android:icon="@mipmap/ic_launcher"  
  8.         android:label="@string/app_name"  
  9.         android:supportsRtl="true"  
  10.         android:theme="@style/AppTheme">  
  11.         <meta-data  
  12.             android:name="com.baidu.lbsapi.API_KEY"  
  13.             android:value="lPdICf3mOjPpwXsUzv8Omgec"/>  
  14.         <activity  
  15.             android:name=".MainActivity"  
  16.             android:label="@string/app_name"  
  17.             android:theme="@style/AppTheme.NoActionBar">  
  18.             <intent-filter>  
  19.                 <action android:name="android.intent.action.MAIN" />  
  20.   
  21.                 <category android:name="android.intent.category.LAUNCHER" />  
  22.             </intent-filter>  
  23.         </activity>  
  24.     </application>  
  25.   
  26.     //以下为权限设置  
  27.     <uses-permission android:name="android.permission.GET_ACCOUNTS" />  
  28.     <uses-permission android:name="android.permission.USE_CREDENTIALS" />  
  29.     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  
  30.     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />  
  31.     <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >  
  32.     </permission>  
  33.     <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >  
  34.     </uses-permission>  
  35.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >  
  36.     </uses-permission>  
  37.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >  
  38.     </uses-permission>  
  39.     <uses-permission android:name="android.permission.INTERNET" >  
  40.     </uses-permission>  
  41.     <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >  
  42.     </uses-permission>  
  43.     <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->  
  44.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >  
  45.     </uses-permission>  
  46.     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
  47.     <uses-permission android:name="android.permission.WAKE_LOCK" >  
  48.     </uses-permission>  
  49.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  50.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  51.     <uses-permission android:name="android.permission.ACCESS_GPS" />  
  52.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  53.     <uses-permission android:name="android.permission.READ_CONTACTS" />  
  54.     <uses-permission android:name="android.permission.CALL_PHONE" />  
  55.     <uses-permission android:name="android.permission.READ_SMS" />  
  56.     <uses-permission android:name="android.permission.SEND_SMS" />  
  57.     <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->  
  58.     <uses-permission android:name="android.permission.GET_TASKS" />  
  59.     <uses-permission android:name="android.permission.CAMERA" >  
  60.     </uses-permission>  
  61.     <uses-permission android:name="android.permission.RECORD_AUDIO" >  
  62.     </uses-permission>  
  63.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >  
  64.     </uses-permission>  
  65.     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  
  66.     <uses-permission android:name="android.permission.BROADCAST_STICKY" />  
  67.     <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  68.     <!-- 来电消音 -->  
  69.     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >  
  70.     </uses-permission>  
  71.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  72.     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />  
  73. </manifest> 
总结


通过查找资料以及网上搜索 最终初步掌握了地图定位技术

0 0
原创粉丝点击