安卓利用百度api定位遇到 經緯度經緯度返回4.9E-324
阿新 • • 發佈:2019-01-02
將需要的庫檔案匯入了libs以後
我直接右鍵“Add as Library”
然後設定Manifest.xml
service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > <intent-filter> <action android:name="com.baidu.location.service_v2.2" > </action> </intent-filter> </service> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="*************" />//申請的key值
宣告許可權
<!-- 這個許可權用於進行網路定位--> <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.READ_PHONE_STATE"></uses-permission> <!-- 寫入擴充套件儲存,向擴充套件卡寫入資料,用於寫入離線定位資料--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 訪問網路,網路定位需要上網--> <uses-permission android:name="android.permission.INTERNET" /> <!-- SD卡讀取許可權,使用者寫入離線定位資料--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
獲取程式碼
package com.wb.fff; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.TextView; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; public class MainActivity extends AppCompatActivity { private final String TAG = "MainActivity"; private LocationClient mLocationClient; private BDLocationListener mBDLocationListener; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 宣告LocationClient類 mLocationClient = new LocationClient(getApplicationContext()); mBDLocationListener = new MyBDLocationListener(); // 註冊監聽 mLocationClient.registerLocationListener(mBDLocationListener); textView=(TextView) findViewById(R.id.textView); } /** 獲得所在位置經緯度及詳細地址 */ public void getLocation(View view) { // 宣告定位引數 LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 設定定位模式 高精度 option.setCoorType("bd09ll");// 設定返回定位結果是百度經緯度 預設gcj02 option.setScanSpan(5000);// 設定發起定位請求的時間間隔 單位ms option.setIsNeedAddress(true);// 設定定位結果包含地址資訊 option.setAddrType("all"); option.setNeedDeviceDirect(true);// 設定定位結果包含手機機頭 的方向 // 設定定位引數 mLocationClient.setLocOption(option); // 啟動定位 mLocationClient.start(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); // 取消監聽函式 if (mLocationClient != null) { mLocationClient.unRegisterLocationListener(mBDLocationListener); } } private class MyBDLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // 非空判斷 if (location != null) { // 根據BDLocation 物件獲得經緯度以及詳細地址資訊 double latitude = location.getLatitude(); double longitude = location.getLongitude(); String address = location.getAddrStr(); System.out.print("address:" + address + " latitude:" + latitude + " longitude:" + longitude + "---"); Log.i(TAG, "address:" + address + " latitude:" + latitude + " longitude:" + longitude + "---"); textView.setText("address:" + address + " latitude:" + latitude + " longitude:" + longitude + "---"); if (mLocationClient.isStarted()) { // 獲得位置之後停止定位 mLocationClient.stop(); } } } } }
結果返回
address null
latitude 4.9E-324
longitude 4.9E-324
回去排除發現
許可權也打開了
庫也匯入了
但是.so檔案未進行編譯
需要在build.gradle中加入以下部分
在android下加入
sourceSets{
main{
jniLibs.srcDirs=['libs']
}
}