百度地圖一(實現獲取經緯度和具體位置)


首先下載百度地圖開發包,把libs中的包拷到項目中libs中
在app下的build.gradle中添加sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

AndroidManifest.xml
application里添加
<meta-data android:name="com.baidu.lbsapi.API_KEY"
android:value="秘鑰"/>
秘鑰的獲取
在安裝了Android開發環境后,主目錄下會自動創建一個隱藏的.android目錄,其下有一個debug.keystore文件即為調試秘鑰。

為了獲取證書指紋,可以運行如下命令:

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
這樣我們就能得到MD5,SHA1和SHA256三種指紋。(本方法獲取秘鑰沒有使用過,如若獲取不到參考開發指南)
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
在application外添加權限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
mainActivity.java
package com.example.lgkj.bugmapapp;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity{

private MapView mMapView = null;

BaiduMap mBaiduMap;

public LocationClient mLocationclient;

private TextView postionTextView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//獲取地圖初始化
// requestWindowFeature(Window.FEATURE_NO_TITLE);
// SDKInitializer.initialize(getApplicationContext());
//
// setContentView(R.layout.activity_main);
// mMapView = (MapView) findViewById(R.id.map_view);

// 開啟位置
mLocationclient = new LocationClient(getApplicationContext());
// 監聽位置的變化
mLocationclient.registerLocationListener(new MyLocationListener());
setContentView(R.layout.activity_main);
postionTextView = (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 (!permissionList.isEmpty()){
String[] permissions = permissionList.toArray(new String[permissionList.size()]);
ActivityCompat.requestPermissions(MainActivity.this,permissions,1);
}else{
requestLocation();
}
}

// 設置更新時間間隔
private void initLocation(){
LocationClientOption option = new LocationClientOption();
// option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);
option.setScanSpan(2000);
option.setIsNeedAddress(true);
mLocationclient.setLocOption(option);
}
// 開啟定位並且初始化
private void requestLocation(){
initLocation();
mLocationclient.start();
}

// 請求權限之后返回數值
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull 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 extends BDAbstractLocationListener {

@Override
public void onReceiveLocation(BDLocation bdLocation) {
StringBuffer currentPostion = new StringBuffer();
currentPostion.append("緯度:").append(bdLocation.getLatitude())
.append("\n");
currentPostion.append("經線:").append(bdLocation.getLongitude())
.append("\n");
currentPostion.append("國家:").append(bdLocation.getCountry())
.append("\n");
currentPostion.append("省:").append(bdLocation.getProvince())
.append("\n");
currentPostion.append("市:").append(bdLocation.getCity())
.append("\n");
currentPostion.append("區:").append(bdLocation.getDistrict())
.append("\n");
currentPostion.append("街道:").append(bdLocation.getStreet())
.append("\n");
currentPostion.append("定位方式:");
if (bdLocation.getLocType()==BDLocation.TypeGpsLocation){
currentPostion.append("GPS");
}else if (bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){
currentPostion.append("網絡");
}
postionTextView.setText(currentPostion);
}
}
@Override
protected void onResume() {
super.onResume();
// mMapView.onResume();
}

@Override
protected void onPause() {
super.onPause();
// mMapView.onPause();
}

// 程序關閉之后的銷毀工作
@Override
protected void onDestroy() {
super.onDestroy();
mLocationclient.stop();
// mMapView.onDestroy();
// MapView.setMapCustomEnable(false);
// mMapView = null;
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM