百度地图定位app

前期准备

(一)注册(登录)百度地图账号和获取密钥
1.注册和获取密钥
网址:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/ak
2.什么是密钥
开发者在使用SDK之前需要获取百度地图移动版开发密钥(AK),该AK与您的百度账户相关联。请妥善保存您的AK,地图初始化时需要使用AK。
3.获取开发密钥(AK)
百度地图 SDK开发密钥的申请地址为:http://lbsyun.baidu.com/apiconsole/key
步骤如下:
(1)登录百度账号
(2)百度地图开发者注册

(3)SHA1获取
① 找到View中的Tool Windows并打开Terminal

在这里插入图片描述

② 找到自己的jdk的bin目录
③ 在Android studio控制台下方输入 cd+bin目录
④ 然后输入keytool -list -v -keystore 目录+debug.keystore 口令为:android
(4)获取包名
在app目录下的build.gradle文件中找到包名
在这里插入图片描述

(5)创建应用填写 SHA1和包名 然后获取密钥。
在这里插入图片描述
(二)下载百度地图软件开发包
1.根据个人需求选择相应功能
在这里插入图片描述
在这里插入图片描述
2.解压安装包,选择模块视图为Project,复制定位包BaiduLBSAndroid.jar至项目的libs文件夹里,然后右键jar文件,选择“Add As Library”
在main文件夹下新建名为jniLibs的文件夹,复制存放.so文件(share object)的多个文件夹至jniLibs文件夹。

定位功能实现

(1)添加权限(下面代码包含所有可能用到的权限)


<!--百度定位所需要权限,前面是LOCATE权限组的2个危险权限-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--百度定位所需要的普通权限-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--因为程序要与百度云服务交互-->
<uses-permission android:name="android.permission.INTERNET"/>

(2)在创建了百度位置应用的Key后,需要在清单文件的标签内登记,示例代码如下:
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="psRFNWWmhblWDMO7XhiFtGEgGD9lbhM4"/>
(3)在布局中添加百度的mapview视图控件

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

(4)MainActivity

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();
        setLovationManager();
        baiduMap.setMyLocationEnabled(true);
    }
     private void setLovationManager() {
        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.makeText(this,"没有可用的位置提供器",Toast.LENGTH_SHORT).show();
            return;
        }
        Location location=locationManager.getLastKnownLocation(provider);
        if(location!=null){
            navigateTo(location);
        }
     locationManager.requestLocationUpdates(provider,5000,5,locationListener);
    }
     private void navigateTo(Location location) {
        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 onLocationChanged(Location location) {
            if(locationManager!=null)
                navigateTo(location);
        }
         @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {
         }
         @Override
        public void onProviderEnabled(String s) {
         }
         @Override
        public void onProviderDisabled(String s) {
 
        }
    };
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
        if(locationManager!=null){
            locationManager.removeUpdates(locationListener);
        }
        baiduMap.setMyLocationEnabled(false);
    }
     @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    } 
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }
}

(5)编写java代码

public class MainActivity extends AppCompatActivity {
Lscat ionClient mLocationClient: //定位客户端
TextView tv. positionText; /盛 小定位信息控件
@Override
protected vnid onCreate (Rundle savedTnstanceState) {
super. onCreate (savedInstanceState);
setCont entView(R. layout. activity_ main) :
/如果没有定位权限,动态请求用户允许使用该衩限
if (ActivityCompat. chcckSclfPermission( context: this, Manifest. Dermi ss ion. ACCESS FINE LOCATION) !- PackagcMancgcr. PERMISSION GRANTED {
ActivityCompat. requestPermissions( activity: this, new Str ing[] {Manifest. permission. ACCESS_ FINE L0CATIOM,requestCode: 1);
)else {
requestLocation0;
@Override
public void onRecuestPermi ss ionsResult(int requestCode, eNonNul1 String[] permissions, CNonNu1l int[] grantResults) {
switch (reques tCode) {
casc 1:
if (grantResults[0] != PackageManager. /ERWISSIOW_ GHRANTTED)
Toast. makeText( context: this,text: ”没有定位权限!”, Toast. LENGIH LONG. show();
finishO:
} else {
requestLocation();

(6)最后创建一个activity,实现定位就可以啦

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    >
    <com.baidu.mapapi.map.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true">
 
    </com.baidu.mapapi.map.MapView>
 
</LinearLayout>

实验结果

请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值