ホームページ >Java >&#&チュートリアル >Android で位置情報の許可をリクエストすると「PERMISSION_DENIED」エラーが発生するのはなぜですか?

Android で位置情報の許可をリクエストすると「PERMISSION_DENIED」エラーが発生するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-11 11:14:15817ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。