百度地图定位APP

255 阅读1分钟

这次的任务是根据百度的官方文档开发必读地图定位APP,这次主要参考的是文档以及(17条消息) 超详细的Android百度地图开发:在APP上定位并显示出来_追-CSDN博客_android百度地图定位开发。 首先注册账号,然后申请创建应用,申请API KEY。

![H4Q01GW92DZS)SV5DGGYN1.png 分布开发版SHA1在这个位置。

lbsyun.baidu.com/index.php?t… 然后下载所需要的百度地图SDK。将相关文件放入创建的项目对应的目录。

主要代码: AndroidManifest.xml文件

<!-- 读写sd卡 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 写sd卡 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<!-- 获取精确gps位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 获取粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 允许程序访问额外的定位提供者指令获取模拟定位信息 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 网络链接 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 更改wifi连状态 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 获取wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <meta-data
        android:name="com.baidu.lbsapi.API_KEY"
        android:value="填写刚申请的API_KEY" />

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <!--定义百度地图的服务,用于定位-->
    <service android:name="com.baidu.location.f"
        android:enabled="true"
        android:process=":remote">
    </service>
</application>

activity_main.xml文件

MainActivity文件

package com.example.lbstest;

import android.Manifest; import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast;

import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption;

import java.util.ArrayList; import java.util.List;

public class MainActivity extends AppCompatActivity {

public LocationClient mLocationClient;
//private MapView mapview;
private TextView positionText;
private StringBuilder currentPosition;

public MainActivity() {
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mLocationClient = new LocationClient((getApplicationContext()));
    mLocationClient.registerNotifyLocationListener(new MyLocationListener());
    setContentView(R.layout.activity_main);
    positionText = (TextView)findViewById(R.id.position_text_view);
    List<String> permissionList = new ArrayList<>();
    //如果没有启动下面权限,就询问用户让用户打开
    if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED)
    {
        permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
    }
    if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED)
    {
        permissionList.add(Manifest.permission.READ_PHONE_STATE);
    }
    if (ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    }
    if (!permissionList.isEmpty()) {
        String[] permissions = permissionList.toArray(new String[permissionList.size()]);
        ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);
    }
    else {
        requestLocation();
    }
}

/初始化函数,并启动位置客户端LocationClient/ private void requestLocation() { initLocation(); mLocationClient.start(); }

/初始化函数/ private void initLocation() { LocationClientOption option = new LocationClientOption(); option.setScanSpan(5000); mLocationClient.setLocOption(option); }

/只有同意打开相关权限才可以开启本程序/ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0) { for (int result : grantResults) { if (result != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "必须同意所有权限才能使用本程序", Toast.LENGTH_SHORT).show(); finish(); return; } } requestLocation(); } else { Toast.makeText(this, "发生未知错误", Toast.LENGTH_SHORT).show(); finish(); } break; default: } }

/监听线程,获得当前的经纬度,并显示/ public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(final BDLocation location) { runOnUiThread(new Runnable() { @Override public void run() { currentPosition = new StringBuilder(); currentPosition.append("纬度:").append(location.getLatitude()).append("\n"); currentPosition.append("经度:").append(location.getLongitude()).append("\n"); currentPosition.append("定位方式:"); if (location.getLocType() == BDLocation.TypeGpsLocation) { currentPosition.append("GPS"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) { currentPosition.append("网络"); } positionText.setText(currentPosition); } }); } }

public void onConnectHotSpotMessage(String s, int i) {

}
@Override
protected void onDestroy(){
    super.onDestroy();
    mLocationClient.stop();
}

}

这次主要学习了如何开发百度地图的APP,主要遇到了package android.support.annotation等几个包不存在的问题也成功解决了。这次简易的地图应用的开发锻炼了能力,为日后更难的项目奠定了基础。