赞
踩
提示:转到安卓学习专栏,观看更多内容!
点我直达–>安卓学习专栏
新建一个空的项目,名为LBSTest
安卓百度定位sdk环境配置(图文保姆级);主要是要把下载得到的文件放在指定的位置。
我本来想安装在真机上,但是因为当时这个安卓版本设置为5.0现在我自己的安卓版本太高了,真机上无法安装~~所以建议用手机模拟器配合虚拟定位的修改来测试!
先上效果。我们望梅止渴先!希望你能耐心做完!
把下载到的“BaiduLBS_AndroidSDK_Lib”压缩包解压得到文件,如下:
libs目录下的内容又分为两部分,BaiduLBS_Android.jar这个文件放在我们项目的app模块下面的libs目录,这里就是用来存放所有的Jar包的,我们将BaiduLBS_Android.jar复制到这里。
导入jar包
接下来展开src/main目录,右击该目录→New→Directory,再创建一个名
为jniLibs的目录,这里就是专门用来存放so文件的,然后把压缩包里的
其他所有目录直接复制到这里。
点击sys按钮
文件的能够展开,表示项目已经能引用到这些Jar包
进行代码的修改。
布局文件中的内容非常简单,只有一个TextView控件,用于稍后显示当
前位置的经纬度信息。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/position_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.lbstest"> <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.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.AppCompat"> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="填写你前面申请到的api key" /> <activity android:name=".MainActivity" android:exported="true"> <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> </manifest>
这里可能会有一些报错情况这个报错是因为有时候使用某些api需要使用系统权限,如调用PackageInstaller的相关接口。android.permission.INSTALL_PACKAGES权限,该权限系统只会授权给系统应用。不影响正常使用,强迫症可以按照下方方法消除。
Using system app permission右边有一个severity.把error改为warning就行了。
如果你的“LocationClient ”飘红说明前面的jar配置有问题
package com.example.lbstest; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { public LocationClient mLocationClient; private TextView positionText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(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(); } } private void requestLocation() { mLocationClient.start(); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, 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(BDLocation location) { runOnUiThread(new Runnable() { @Override public void run() { StringBuilder 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); } }); } // @Override public void onConnectHotSpotMessage(String s, int i) { } } }
在默认情况下,调用LocationClient的start() 方法只会定位一次,修改MainActivity中的代码实现实时更新当前的位置。这里增加了一个initLocation() 方法,在initLocation() 方法中我们创建了一个LocationClientOption 对象,然后调用它的setScanSpan() 方法来设置更新的间隔。这里传入了5000,表示每5秒钟会更新一下当前的位置。最后要记得,在活动被销毁的时候一定要调用LocationClient 的stop() 方法来停止定位,不然程序会持续在后台不停地进行定位,从而严重消耗手机的电量。现在重新运行一下程序,然后拿着手机随处移动,你会发现界面上的经纬度信息也会跟着一起变化的。
我本来想安装在真机上,但是因为当时这个安卓版本设置为5.0现在我自己的安卓版本太高了,真机上无法安装~~所以建议用手机模拟器配合虚拟定位的修改来测试!
package com.example.lbstest; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; 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 TextView positionText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(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(); } } //新修改的内容开始 private void requestLocation() { initLocation(); mLocationClient.start(); } private void initLocation(){ LocationClientOption option = new LocationClientOption(); option.setScanSpan(5000); mLocationClient.setLocOption(option); } @Override protected void onDestroy() { super.onDestroy(); mLocationClient.stop(); } //新修改的内容结束 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, 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(BDLocation location) { runOnUiThread(new Runnable() { @Override public void run() { StringBuilder 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); } }); } // @Override public void onConnectHotSpotMessage(String s, int i) { } } }
大家喜欢的话,给个
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。