1. 程式人生 > >安卓利用百度api定位遇到 經緯度經緯度返回4.9E-324

安卓利用百度api定位遇到 經緯度經緯度返回4.9E-324

將需要的庫檔案匯入了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']
        }
    }