案例二———百度地图上定位自己的位置

百度地图定位自己的位置

一.预期效果:




二.主要问题:

1.正确申请API




三.核心代码:

1.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

2.AndroidManifest.xml


<manifest   
    ....  
   <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  
        ...  
        <meta-data   
            android:name="com.baidu.lbsapi.API_KEY"  
            android:value="AO0YBAVzeUxq2lDQYi72cFPT"/>  
       ...  
    </application>  
  
</manifest>  

3.MainActivity.Java


package cn.bzu.tong.bmap;  
  
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;  
      
      
  
    @Override  
    protected 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 stub  
        if(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() {  
          
        @Override  
        public void onStatusChanged(String provider, int status, Bundle extras) {  
            // TODO Auto-generated method stub  
              
        }  
          
        @Override  
        public void onProviderEnabled(String provider) {  
            // TODO Auto-generated method stub  
              
        }  
          
        @Override  
        public void onProviderDisabled(String provider) {  
            // TODO Auto-generated method stub  
              
        }  
          
        @Override  
        public void onLocationChanged(Location location) {  
            // TODO Auto-generated method stub  
            //更新当前设备的位置信息  
            if(location != null){  
                navigateTo(location);  
            }  
        }  
    };  
    protected void onDestroy()  
    {  
        super.onDestroy();  
        baiduMap.setMyLocationEnabled(false);  
        mapView.onDestroy();  
        if(locationManager != null){  
            //关闭程序时将监听移除  
            locationManager.removeUpdates(locationListener);  
        }  
    }  
      
    protected void onPause()  
    {  
        super.onPause();  
        mapView.onPause();  
          
    }  
      
    protected void onResume()  
    {  
        super.onResume();  
        mapView.onResume();  
    }  
  
    @Override  
    public 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;  
    }  
  
}  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值