Android集成百度地圖遇到地圖不顯示小藍點的解決方法

1.集成百度地圖SDK時,遇到了好幾個問題?
1集成后,點擊閃退報錯是因為,沒有同意隱私政策,造成了閃退
解決方法:需要在setContentView之前實現這兩個方法
SDKInitializer.setAgreePrivacy(getApplicationContext(), true);

SDKInitializer.initialize(getApplicationContext());
2.集成地圖功能,沒有出現定位小藍點的原因
是對Api不熟悉,在使用MapStatusUpdate方法 實現地圖zoomTo的方法,造成了

mBaiduMap.animateMapStatus(update);
這個方法失效,導致沒有定位到當前為止顯示小藍點
作為小白,也是花了大量的時間在百度上,而沒有研究API使用方法,在出現問題時,切記要先看方法本身,實在解決不了的在進行百度
以下是完整實現
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: 百度地圖SDK初始化");
SDKInitializer.setAgreePrivacy(getApplicationContext(), true);

    SDKInitializer.initialize(getApplicationContext());
    initLoc();
    setContentView(R.layout.activity_lbs_map);

    locText = (TextView) findViewById(R.id.position_text_view);
    mapView = (MapView)findViewById(R.id.map_view);
    mBaiduMap = mapView.getMap();
    mBaiduMap.setMyLocationEnabled(true);
    checkPermission();

}

private void checkPermission() {
    List<String> permissionList = new ArrayList<>();
    if (ContextCompat.checkSelfPermission(BDMapActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
        permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
    }

    if (ContextCompat.checkSelfPermission(BDMapActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
        permissionList.add(Manifest.permission.READ_PHONE_STATE);
    }

    if (ContextCompat.checkSelfPermission(BDMapActivity.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(BDMapActivity.this, permissions, 1);
    }else {
        requestLocation();
    }
}



private void initLoc() {

    LocationClient.setAgreePrivacy(true);

    // 定位初始化
    try {
        mLocationClient = new LocationClient(this);
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (mLocationClient != null){
        Log.d(TAG, "initLoc: 地圖注冊監聽事件");
        mLocationClient.registerLocationListener(new MyLocationListener());
    }





}

private void requestLocation() {

    Log.d(TAG, "requestLocation: 開始定位");
    initLocation();

}

private void initLocation() {

    LocationClientOption option = new LocationClientOption();
    option.setScanSpan(5000);// 5秒更新一次位置信息
    option.setIsNeedAddress(true); // 返回地址信息
    option.setOpenGps(true);
    option.setCoorType("bd09ll");
    mLocationClient.setLocOption(option);
    
    // 開啟地圖定位圖層
    mLocationClient.start();
    Log.d(TAG, "initLocation: 開啟定位圖層");

}

@SuppressLint("MissingSuperCall")
@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:
    }
}

@Override
protected void onResume() {
    mapView.onResume();
    super.onResume();
}

@Override
protected void onPause() {
    mapView.onPause();
    super.onPause();

}


@Override
protected void onDestroy() {

    mLocationClient.stop();
    mBaiduMap.setMyLocationEnabled(false);
    mapView.onDestroy();
    mapView = null;
    super.onDestroy();
}

public class MyLocationListener extends BDAbstractLocationListener {
    @Override
    public void onReceiveLocation(BDLocation location) {

        if (location == null || mapView == null) {
            return;
        }

        Log.d(TAG, "當前線程: " + Thread.currentThread());

                 StringBuilder builder = new StringBuilder();
                 Log.d(TAG, "run: " + "緯度: " + location.getLatitude() + "定位方式: " + location.getLocType() );
                 builder.append("緯度: ").append(location.getLatitude()).append("\n");
                 builder.append("經度: ").append(location.getLongitude()).append("\n");
                 builder.append("國家: ").append(location.getCountry()).append("\n");
                 builder.append("省: ").append(location.getProvince()).append("\n");
                 builder.append("市: ").append(location.getCity()).append("\n");
                 builder.append("區: ").append(location.getDistrict()).append("\n");
                 builder.append("街道: ").append(location.getStreet()).append("\n");
                 builder.append("定位方式: ");
                 if (location.getLocType() == BDLocation.TypeGpsLocation) {
                     builder.append("GPS");
                 } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
                     builder.append("網絡");
                 }
                 locText.setText(builder);

        if (isFirstLocate) {
            LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
            MapStatusUpdate update = MapStatusUpdateFactory.newLatLngZoom(ll, 18f);

// update = MapStatusUpdateFactory.zoomTo(18f);
mBaiduMap.animateMapStatus(update);
isFirstLocate = false;
}

        MyLocationData locData = new MyLocationData.Builder()
                .accuracy(location.getRadius())
                .direction(location.getDirection())
                .latitude(location.getLatitude())
                .longitude(location.getLongitude()).build();
        mBaiduMap.setMyLocationData(locData);





    }


}

希望能幫助后來人

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內容