Сбой приложения при попытке получить местоположение с картой Baidu - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь внедрить карту baidu в свое приложение. Я настроил все, и он может показать статическую карту. Но когда я пытаюсь получить текущее местоположение, мое приложение падает после того, как я пытаюсь вызвать метод mLocationClient.start (). Я установил ключи API, запросил разрешения, включил сервис и поставил библиотеки в нужное место. Но этот крах все еще там. И я не могу получить информацию о сбоях от моего Logcat. У кого-нибудь есть опыт внедрения карты baidu в ваше приложение для Android?

import android.os.Bundle``
import android.support.v7.app.AppCompatActivity
import android.widget.Button
import com.baidu.location.BDAbstractLocationListener
import com.baidu.location.BDLocation
import com.baidu.location.LocationClient
import com.baidu.location.LocationClientOption
import com.baidu.mapapi.CoordType
import com.baidu.mapapi.SDKInitializer
import com.baidu.mapapi.map.*
import com.baidu.mapapi.model.LatLng
import com.starkey.android.newlink.R

class BaiduMapDemoActivity : AppCompatActivity() {

    private var mMapView: MapView? = null
    private var findLocation: Button? = null
    lateinit var map: BaiduMap
    private var isFirstLoc = true

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        SDKInitializer.initialize(this)
        SDKInitializer.setCoordType(CoordType.BD09LL)

        setContentView(R.layout.baidu_demo)
        mMapView = findViewById(R.id.bmapView)
        findLocation = findViewById(R.id.addfence) as Button

        map = mMapView!!.map
        map.isMyLocationEnabled = true
        map.isMyLocationEnabled = true

        val mCurrentMode = MyLocationConfiguration.LocationMode.FOLLOWING
        val mCurrentMarker = 
        BitmapDescriptorFactory.fromResource(R.drawable.ha_icon)
        val accuracyCircleFillColor = 0xAAFFFF88.toInt()
        val accuracyCircleStrokeColor = 0xAA00FF00.toInt()

        map.setMyLocationConfiguration(MyLocationConfiguration(
                mCurrentMode, true, mCurrentMarker,
                accuracyCircleFillColor, accuracyCircleStrokeColor))
        val mLocationClient = LocationClient(applicationContext)
        val mylistener = MyLocationListenner()

        mLocationClient.registerLocationListener(mylistener)
        val option = LocationClientOption()
        option.locationMode = 
(LocationClientOption.LocationMode.Hight_Accuracy)
        option.setCoorType("bd09ll")
        option.setScanSpan(1000)
        option.openGps = true
        option.setLocationNotify(true)
        option.setIgnoreKillProcess(false)
        option.SetIgnoreCacheException(false)
        option.setWifiCacheTimeOut(5 * 60 * 1000)
        option.setEnableSimulateGps(false)

        mLocationClient.setLocOption(option)

        (findLocation as Button).setOnClickListener {
            mLocationClient.start()
        }

        var test = mLocationClient.isStarted
        mLocationClient.requestLocation()
    }

    override fun onDestroy() {
        super.onDestroy()
        mMapView!!.onDestroy()
    }

    override fun onResume() {

        super.onResume()
        mMapView!!.onResume()

    }

    override fun onPause() {
        super.onPause()
        mMapView!!.onPause()
    }

    inner class MyLocationListenner : BDAbstractLocationListener() {

        override fun onReceiveLocation(location: BDLocation?) {
            if (location == null || mMapView == null)
                return;
            val locData = MyLocationData.Builder()
                    .accuracy(location.radius)
                    .direction(100.toFloat()).latitude(location.latitude)
                    .longitude(location.longitude).build()
            map.setMyLocationData(locData)
            if (isFirstLoc) {
                isFirstLoc = false
                val ll = LatLng(location.latitude,
                        location.longitude)
                val u = MapStatusUpdateFactory.newLatLng(ll)
                map.animateMapStatus(u)
            }
        }
        fun onReceivePoi(poiLocation: BDLocation) {
        }
    }

Сообщение от Logcat:

2019-01-04 13: 37: 57.483 25394-25394 / com.starkey.android.newlink.debug I / System.out: перед началом вызова

2019-01-04 13: 37: 59.255 25394-25401 / com.starkey.android.newlink.debug E / zygote64: не удалось прочитать локальный JT_BOOLEAN из регистра v6 на компьютере DEX 0x0000014f в методе void com.android.internal .os.ZygoteInit.main (java.lang.String [])

2019-01-04 13: 37: 59.296 25394-25401 / com.starkey.android.newlink.debug E / zygote64: Не удалось прочитать локальный JT_BOOLEAN из регистра v6 на компьютере DEX 0x0000014f в методе void com.android.internal .os.ZygoteInit.main (java.lang.String [])

2019-01-04 13: 37: 59.299 25394-25401 / com.starkey.android.newlink.debug E / zygote64: не удалось прочитать локальный JT_INT из регистра v9 на ПК DEX 0x0000014f в методе void com.android.internal .os.ZygoteInit.main (java.lang.String [])

2019-01-04 13: 37: 59.305 25394-25401 / com.starkey.android.newlink.debug E / zygote64: Не удалось прочитать локальный JT_BOOLEAN из регистра v12 на компьютере DEX 0x0000014f в методе void com.android.internal .os.ZygoteInit.main (java.lang.String [])

2019-01-04 13: 39: 08.749 25394-25394 / com.starkey.android.newlink.debug I / System.out: после начала вызова

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

пожалуйста, удалите файл .jar & .so из папки libs & jinLibs и добавьте ниже api в app.gragle

implementation 'com.baidu.mapapi:base:3.7.1'
implementation 'com.baidu.mapapi:map:3.7.1'
implementation 'com.baidu.mapapi:search:3.7.1'
implementation 'com.baidu.mapapi:util:3.7.1'

теперь исправлена ​​ошибка SDKInitializer.initialize (applicationContext).

0 голосов
/ 04 января 2019

AFAIK, SDKInitializer.initialize следует использовать ApplicationContext, this внутри Activity недостаточно.

Используйте

SDKInitializer.initialize(applicationContext)

вместо

SDKInitializer.initialize(this)

Ссылка: Привет BaiduMap (китайский)

  1. Ссылка Context, используемая для инициализации SDK во время создания приложения, является глобальной переменной;

Предупреждение. Перед использованием любых компонентов в SDK (вы) должны позвонить SDKInitializer.initialize(getApplicationContext());. Поэтому мы предлагаем поместить этот метод в метод инициализации Application.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...