概述
之前发过一篇利用百度定位SDK实现经纬度显示,没有公布出代码,今天就在此基础上增添显示地理位置以及POI显示等其他功能,附上完整代码供大家参考,这是上次的链接,具体配置环境等步骤请自行参考
bbno:百度地图定位功能-经纬度显示(Android版)zhuanlan.zhihu.com下面直接放代码
- activitymain.xml(app ->src ->main ->res ->layout ->activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp" />
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginBottom="32dp"
android:text="start"
app:layout_constraintBottom_toBottomOf="parent"
tools:layout_editor_absoluteX="225dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
- AndroidManifest.xml(app ->src ->main ->AndroidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dw1">
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<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="你的AK" >
</meta-data>
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" >
</service>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- build.gradle(app ->build.gradle)
apply plugin: 'com.android.application'
android {
sourceSets{
main{
jniLibs.srcDir 'libs'
jni.srcDirs = [] //disable automatic ndk-build
}
}
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.dw1"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation fileTree(dir: 'libs' , include: ['*.jar'])
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2',{
exclude group: 'com.android.support', module: 'support-annotations'
})
//implementation 'com.github.hotchemi:permissionsdispatcher:2.2.0'
// annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.2.0'
implementation 'com.android.support:appcompat-v7:29.0.0'
//testImplementation 'junit: junit: 4.12'
- MainActivity.java
代码如下:
package com.example.dw1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.baidu.location.PoiRegion;
import com.baidu.location.BDLocationListener;
import com.baidu.location.Poi;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.BDLocation;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView locationInfoTextView = null;
private Button startButton = null;
private LocationClient locationClient = null;
private static final int UPDATE_TIME = 5000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationInfoTextView = (TextView) this.findViewById(R.id.text2);
startButton = (Button) this.findViewById(R.id.btn_start);
locationClient = new LocationClient(this);
//设置定位条件
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setIsNeedLocationPoiList(true);
//可选,是否需要周边POI信息,默认为不需要,即参数为false
//如果开发者需要获得周边POI信息,此处必须为true
option.setIsNeedAddress(true);//获取位置
option.setIsNeedLocationDescribe(true);
//可选,是否需要位置描述信息,默认为不需要,即参数为false
//如果开发者需要获得当前点的位置信息,此处必须为true
//是否打开GPS
option.setCoorType("bd09ll");
//可选,设置返回经纬度坐标类型,默认GCJ02
//GCJ02:国测局坐标;
//BD09ll:百度经纬度坐标;
//BD09:百度墨卡托坐标;
//海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
option.setPriority(LocationClientOption.NetWorkFirst);
//设置定位优先级
option.setProdName("LocationDemo");
//设置产品线名称
option.setScanSpan(UPDATE_TIME);
//设置定时定位的时间间隔。单位毫秒
locationClient.setLocOption(option);
//注册位置监听器
locationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
int tag=2;
if (location == null) {
return;
}
StringBuffer sb = new StringBuffer(256);
sb.append("Time : ");
sb.append(location.getTime());//获取定位时间
sb.append("nError code : ");
sb.append(location.getLocType());//获取类型
sb.append("nLatitude : ");
sb.append(location.getLatitude());//获取纬度信息
sb.append("nLongitude : ");
sb.append(location.getLongitude());//获取经度信息
sb.append("nRadius : ");
sb.append(location.getRadius());//获取定位精准度
sb.append("npoi:");
//sb.append(location.getPoiList());
if (location.getPoiList() != null && !location.getPoiList().isEmpty()) {
for (int i = 0; i < location.getPoiList().size(); i++) {
Poi poi = (Poi) location.getPoiList().get(i);
sb.append("poiName:");
sb.append(poi.getName() + ", ");
sb.append("poiTag:");
sb.append(poi.getTags() + "n");
}
}
if (location.getPoiRegion() != null) {
sb.append("PoiRegion: ");// 返回定位位置相对poi的位置关系,仅在开发者设置需要POI信息时才会返回,在网络不通或无法获取时有可能返回null
PoiRegion poiRegion = location.getPoiRegion();
sb.append("DerectionDesc:"); // 获取POIREGION的位置关系,ex:"内"
sb.append(poiRegion.getDerectionDesc() + "; ");
sb.append("Name:"); // 获取POIREGION的名字字符串
sb.append(poiRegion.getName() + "; ");
sb.append("Tags:"); // 获取POIREGION的类型
sb.append(poiRegion.getTags() + "; ");
//sb.append("nSDK版本: ");
}
if (location.getLocType() == BDLocation.TypeGpsLocation) {
sb.append("nSpeed : ");
sb.append(location.getSpeed());
sb.append("nSatellite : ");
sb.append(location.getSatelliteNumber());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
sb.append("nAddress : ");
sb.append(location.getAddrStr());
}
locationInfoTextView.setText(sb.toString());
}
});
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (locationClient == null) {
return;
}
if (locationClient.isStarted()) {
startButton.setText("Start");
locationClient.stop();
}
else {
startButton.setText("Stop");
locationClient.start();
locationClient.requestLocation();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (locationClient != null && locationClient.isStarted()) {
locationClient.stop();
locationClient = null;
}
}
}
具体效果由于没有加mapview,所以运行结果如下
其余更全面的百度地图定位SDK功能请查看官网文档,也可以下载官方的Demo体验一下,链接如下:
Android定位SDK | 百度地图API SDKlbsyun.baidu.com最后
以上就是俏皮铅笔为你收集整理的android gps权限_百度地图定位SDK-代码篇(Android)的全部内容,希望文章能够帮你解决android gps权限_百度地图定位SDK-代码篇(Android)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复