> Java > java지도 시간 > Android에서 위치 권한을 요청할 때 'PERMISSION_DENIED' 오류가 발생하는 이유는 무엇입니까?

Android에서 위치 권한을 요청할 때 'PERMISSION_DENIED' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-11 11:14:15
원래의
848명이 탐색했습니다.

Why Am I Getting a 'PERMISSION_DENIED' Error When Requesting Location Permission on Android?

런타임에 위치 권한을 요청하는 방법

문제:

위치 권한을 다음에 추가할 때 매니페스트가 Android 6에서 실행되고 응답이 없거나 위치 업데이트가 없습니다. 받았습니다.

질문:

제가 뭘 잘못하고 있나요? (스택 추적의 오류 코드는 'PERMISSION_DENIED'입니다.)

답변:

런타임에 위치 권한을 요청하려면 ActivityCompat을 사용하여 명시적으로 요청해야 합니다. requestPermissions() 메서드.

Kotlin으로 업데이트된 코드 및 Android용 예제 12:

Kotlin:

import android.Manifest.permission.ACCESS_FINE_LOCATION
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import android.os.Bundle
import android.provider.Settings
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    private lateinit var locationManager: LocationManager
    private var provider: String? = null
    private val locationListener = MyLocationListener()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        locationManager = getSystemService(LocationManager::class.java)
        provider = locationManager.getBestProvider(null, false)

        if (checkPermission()) {
            getLocationUpdates()
        } else {
            requestPermission()
        }
    }

    override fun onResume() {
        super.onResume()
        if (checkPermission()) {
            getLocationUpdates()
        }
    }

    override fun onPause() {
        super.onPause()
        if (checkPermission()) {
            locationManager.removeUpdates(locationListener)
        }
    }

    private fun getLocationUpdates() {
        locationManager.requestLocationUpdates(provider, 0, 0f, locationListener)
        val location = locationManager.getLastKnownLocation(provider)
        if (location != null) {
            onLocationChanged(location)
        }
    }

    private fun onLocationChanged(location: Location) {
        val latitude = location.latitude
        val longitude = location.longitude
        Toast.makeText(this, "Location: Lat: $latitude, Lng: $longitude", Toast.LENGTH_LONG).show()
    }

    private fun checkPermission(): Boolean {
        return ActivityCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
    }

    private fun requestPermission() {
        ActivityCompat.requestPermissions(this, arrayOf(ACCESS_FINE_LOCATION), PERMISSION_REQUEST_CODE)
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
        if (requestCode == PERMISSION_REQUEST_CODE) {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                getLocationUpdates()
            } else {
                // Permission denied.
                AlertDialog.Builder(this)
로그인 후 복사

위 내용은 Android에서 위치 권한을 요청할 때 'PERMISSION_DENIED' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿