我是靠谱客的博主 俏皮铅笔,最近开发中收集的这篇文章主要介绍android gps权限_百度地图定位SDK-代码篇(Android),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

581696777fb2cd48c90f8fe13e94aa26.png

之前发过一篇利用百度定位SDK实现经纬度显示,没有公布出代码,今天就在此基础上增添显示地理位置以及POI显示等其他功能,附上完整代码供大家参考,这是上次的链接,具体配置环境等步骤请自行参考

bbno:百度地图定位功能-经纬度显示(Android版)​zhuanlan.zhihu.com
adb48bd76c6233b06bf9c32e1f8176f4.png

下面直接放代码

  • 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

88f4aca9815b603fba4b07e80c68a572.png

代码如下:

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,所以运行结果如下

265b0be90aab7b3726bb1e8504965506.png

其余更全面的百度地图定位SDK功能请查看官网文档,也可以下载官方的Demo体验一下,链接如下:

Android定位SDK | 百度地图API SDK​lbsyun.baidu.com
6cff0a1282710e0edba9e5ca26d7296f.png

最后

以上就是俏皮铅笔为你收集整理的android gps权限_百度地图定位SDK-代码篇(Android)的全部内容,希望文章能够帮你解决android gps权限_百度地图定位SDK-代码篇(Android)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部