Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用谷歌地图访问用户当前位置时,应用程序崩溃_Android_Google Maps_Kotlin_Android Geofence - Fatal编程技术网

在Android中使用谷歌地图访问用户当前位置时,应用程序崩溃

在Android中使用谷歌地图访问用户当前位置时,应用程序崩溃,android,google-maps,kotlin,android-geofence,Android,Google Maps,Kotlin,Android Geofence,我正在尝试访问用户的当前位置。运行应用程序时崩溃。地图正在运行,它指向默认的lat long,即Sydney,但在尝试访问当前位置时,应用程序崩溃。我已经创建了enableUserLocation方法来检查权限 class MapsActivity : AppCompatActivity(), OnMapReadyCallback { private lateinit var mMap: GoogleMap private lateinit var g

我正在尝试访问用户的当前位置。运行应用程序时崩溃。地图正在运行,它指向默认的lat long,即Sydney,但在尝试访问当前位置时,应用程序崩溃。我已经创建了enableUserLocation方法来检查权限


    class MapsActivity : AppCompatActivity(), OnMapReadyCallback {

        private lateinit var mMap: GoogleMap
        private lateinit var geofencingClient: GeofencingClient
        private var FINE_LOCATION_ACCESS_REQUEST_CODE = 10001

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_maps)
            // Obtain the SupportMapFragment and get notified when the map is ready to be used.
            val mapFragment = supportFragmentManager
                .findFragmentById(R.id.map) as SupportMapFragment
            mapFragment.getMapAsync(this)

            geofencingClient = LocationServices.getGeofencingClient(this)
        }

        /**
         * Manipulates the map once available.
         * This callback is triggered when the map is ready to be used.
         * This is where we can add markers or lines, add listeners or move the camera. In this case,
         * we just add a marker near Sydney, Australia.
         * If Google Play services is not installed on the device, the user will be prompted to install
         * it inside the SupportMapFragment. This method will only be triggered once the user has
         * installed Google Play services and returned to the app.
         */
        override fun onMapReady(googleMap: GoogleMap) {
            mMap = googleMap

            // Add a marker in Sydney and move the camera
            val sydney = LatLng(-34.0, 151.0)
            mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
            mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))

            enableUserLocation()
        }


        private fun enableUserLocation() {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED
            ) {
                mMap.isMyLocationEnabled = true
            } else {
                //Ask for permission
                if (ActivityCompat.shouldShowRequestPermissionRationale(
                        this,
                        Manifest.permission.ACCESS_FINE_LOCATION
                    )
                ) {
                    //we need to show a user dialog that why the permission is needed and then ask for the permission
                    ActivityCompat.requestPermissions(
                        this,
                        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                        FINE_LOCATION_ACCESS_REQUEST_CODE
                    )
                } else {
                    ActivityCompat.requestPermissions(
                        this,
                        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                        FINE_LOCATION_ACCESS_REQUEST_CODE
                    )
                }

            }


        }

        override fun onRequestPermissionsResult(
            requestCode: Int,
            permissions: Array<out String>,
            grantResults: IntArray
        ) {
            if (requestCode == FINE_LOCATION_ACCESS_REQUEST_CODE) {
                if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //We have the permission
                    mMap.isMyLocationEnabled = true
                } else {
                    //we do not have the permission

                }
            }

        }
    }


类MapsActivity:AppCompatActivity(),OnMapReadyCallback{
私有lateinit var mMap:GoogleMap
私人lateinit var Geofencing客户:Geofencing客户
专用变量精细\位置\访问\请求\代码=10001
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u映射)
//获取SupportMapFragment,并在地图准备好使用时收到通知。
val mapFragment=supportFragmentManager
.findFragmentById(R.id.map)作为SupportMapFragment
getMapAsync(此)
geofencingClient=LocationServices.getGeofencingClient(this)
}
/**
*一旦可用,就可以操纵贴图。
*当映射准备好使用时,将触发此回调。
*这是我们可以添加标记或线条、添加侦听器或移动摄影机的地方。在这种情况下,
*我们只是在澳大利亚悉尼附近加了一个标记。
*如果设备上未安装Google Play服务,系统将提示用户安装
*它位于SupportMapFragment内。此方法仅在用户
*已安装Google Play服务并返回应用程序。
*/
在mapready上覆盖乐趣(谷歌地图:谷歌地图){
mMap=谷歌地图
//在Sydney添加一个标记并移动相机
val sydney=LatLng(-34.0151.0)
mMap.addMarker(MarkerOptions().position(sydney).title(“sydney中的标记”))
mMap.moveCamera(CameraUpdateFactory.newLatLng(悉尼))
enableUserLocation()
}
private fun enableUserLocation(){
if(ContextCompat.checkSelfPermission(这个,Manifest.permission.ACCESS\u FINE\u位置)
==已授予PackageManager.PERMISSION\u权限
) {
mMap.isMyLocationEnabled=真
}否则{
//请求许可
如果(ActivityCompat.shouldShowRequestPermissionRegulation)(
这
Manifest.permission.ACCESS\u FINE\u位置
)
) {
//我们需要显示一个用户对话框,说明为什么需要权限,然后请求权限
ActivityCompat.requestPermissions(
这
阵列(舱单、权限、访问位置),
精细位置访问请求代码
)
}否则{
ActivityCompat.requestPermissions(
这
阵列(舱单、权限、访问位置),
精细位置访问请求代码
)
}
}
}
覆盖onRequestPermissionsResult(
请求代码:Int,
权限:数组,
格兰特结果:因塔雷
) {
if(requestCode==FINE\u LOCATION\u ACCESS\u REQUEST\u CODE){
if(grantResults.size>0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
//我们得到了许可
mMap.isMyLocationEnabled=真
}否则{
//我们没有得到许可
}
}
}
}
下面是logcat错误,它表示这是一个运行时异常


    2020-05-21 14:01:05.064 7621-7628/? E/art: Failed sending reply to debugger: Broken pipe
    2020-05-21 14:01:09.525 7621-7621/com.example.geofencedemo E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.geofencedemo, PID: 7621
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.geofencedemo/com.example.geofencedemo.MapsActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class fragment
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
            at android.app.ActivityThread.-wrap12(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6077)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
         Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class fragment
         Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
         Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.SupportMapFragment: calling Fragment constructor caused an exception
            at androidx.fragment.app.Fragment.instantiate(Fragment.java:541)
            at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
            at androidx.fragment.app.FragmentManagerImpl$6.instantiate(FragmentManagerImpl.java:2851)
            at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3196)
            at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134)
            at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357)
            at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
            at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
            at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
            at com.example.geofencedemo.MapsActivity.onCreate(MapsActivity.kt:26)
            at android.app.Activity.performCreate(Activity.java:6662)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
            at android.app.ActivityThread.-wrap12(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6077)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
         Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.newInstance0(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
            at androidx.fragment.app.Fragment.instantiate(Fragment.java:523)
            at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 
            at androidx.fragment.app.FragmentManagerImpl$6.instantiate(FragmentManagerImpl.java:2851) 
            at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3196) 
            at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134) 
            at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357) 
            at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
            at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 
            at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 
            at com.example.geofencedemo.MapsActivity.onCreate(MapsActivity.kt:26) 
            at android.app.Activity.performCreate(Activity.java:6662) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
            at android.app.ActivityThread.-wrap12(ActivityThread.java) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:154) 
            at android.app.ActivityThread.main(ActivityThread.java:6077) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
         Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/maps/SupportMapFragment$zzb;
            at com.google.android.gms.maps.SupportMapFragment.<init>(Unknown Source)
            at java.lang.reflect.Constructor.newInstance0(Native Method) 
            at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
            at androidx.fragment.app.Fragment.instantiate(Fragment.java:523) 
            at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 
            at androidx.fragment.app.FragmentManagerImpl$6.instantiate(FragmentManagerImpl.java:2851) 
            at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3196) 
            at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134) 
            at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357) 
            at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
            at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 
            at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 
            at com.example.geofencedemo.MapsActivity.onCreate(MapsActivity.kt:26) 
            at android.app.Activity.performCreate(Activity.java:6662) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
            at android.app.ActivityThread.-wrap12(ActivityThread.java) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:154) 
            at android.app.ActivityThread.main(ActivityThread.java:6077) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
         Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.SupportMapFragment$zzb
            at java.lang.VMClassLoader.findLoadedClass(Native Method)
    2020-05-21 14:01:09.526 7621-7621/com.example.geofencedemo E/AndroidRuntime:     at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:742)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:362)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                ... 30 more
         Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/dynamic/zza;
                ... 30 more
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.dynamic.zza" on path: DexPathList[[zip file "/data/app/com.example.geofencedemo-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.geofencedemo-2/lib/x86, /system/lib, /vendor/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                ... 30 more


2020-05-21 14:01:05.064 7621-7628/? E/art:向调试器发送答复失败:管道断裂
2020-05-21 14:01:09.525 7621-7621/com.example.geofeencedemo E/AndroidRuntime:致命异常:main
进程:com.example.geofencedemo,PID:7621
java.lang.RuntimeException:无法启动活动组件信息{com.example.geofeendemo/com.example.geofeendemo.MapsActivity}:android.view.InflateException:二进制XML文件行#2:二进制XML文件行#2:膨胀类片段时出错
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6077)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
原因:android.view.InflateException:二进制XML文件行#2:二进制XML文件行#2:膨胀类片段时出错
原因:android.view.InflateException:二进制XML文件行#2:膨胀类片段时出错
原因:androidx.fragment.app.fragment$InstantiationException:无法实例化fragment com.google.android.gms.maps.SupportMapFragment:调用片段构造函数导致异常
位于androidx.fragment.app.fragment.instantiate(fragment.java:541)
位于androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
位于androidx.fragment.app.FragmentManagerImpl$6.instantiate(FragmentManagerImpl.java:2851)
位于androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3196)
在安德烈