首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试用百度地图定位时应用程序崩溃

尝试用百度地图定位时应用程序崩溃
EN

Stack Overflow用户
提问于 2019-01-04 18:17:19
回答 2查看 936关注 0票数 0

我试图在我的应用程序中实现百度地图。我设置了所有的东西,它可以显示一个静态地图。但是当我试图获得当前位置时,当我尝试调用mLocationClient.start()方法时,我的应用程序就会崩溃。我已经设置了api键,请求权限,启用服务,并将库放在正确的位置。但这次坠机仍然存在。我无法从我的日志中得到任何坠机信息。有谁有在你的android应用中实现百度地图的经验吗?

代码语言:javascript
复制
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.调试I/System.out:调用开始前 2019-01-04 13:37:59.255 25394-25401/com.starkey.android.newlink. DEX /zygote64 64:未能在DEX 0x0000014f处用com.android.internal.os.ZygoteInit.main(java.lang.String[])方法读取JT_BOOLEAN本地寄存器v6 2019-01-04 13:37:59.296 25394-25401/com.starkey.android.newlink. DEX /zygote64 64:未能在DEX 0x0000014f处用com.android.internal.os.ZygoteInit.main(java.lang.String[])方法读取JT_BOOLEAN本地寄存器v6 2019-01-04 13:37:59.299 25394-25401/com.starkey.android.newlink. DEX /zygote64 64:未能在DEX 0x0000014f处用com.android.internal.os.ZygoteInit.main(java.lang.String[])方法读取JT_INT本地寄存器v9 2019-01-04 13:37:59.305 25394-25401/com.starkey.android.newlink. DEX /zygote64 64:未能在DEX 0x0000014f处用com.android.internal.os.ZygoteInit.main(java.lang.String[])方法读取JT_BOOLEAN本地寄存器v12 2019-01-04 13:39:08.749 25394-25394/com.starkey.android.newlink.调试I/System.out:呼叫启动后

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-04 18:25:29

AFAIK,SDKInitializer.initialize应该使用ApplicationContextthis内部Activity是不够的。

使用

代码语言:javascript
复制
SDKInitializer.initialize(applicationContext)

而不是

代码语言:javascript
复制
SDKInitializer.initialize(this)

参考资料:你好,BaiduMap (中文)

  1. 在应用程序创建期间用于初始化SDK的引用的Context是一个全局变量;

SDKInitializer.initialize(getApplicationContext());**.警告:在使用SDK中的任何组件之前,(您)必须调用因此ee建议将该方法放入** Application**.**的初始化方法中。

票数 0
EN

Stack Overflow用户

发布于 2019-03-06 11:08:04

请从libs & .so文件夹中删除.so和jinLibs文件,并在app.gragle中添加以下api

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54044136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档