android - 检查 Android 位置管理器的权限

标签 android android-permissions locationmanager

这是我的代码

 package com.example.decimateglitchlocation;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.Manifest;
import android.widget.Toast;
import  android.content.pm.PackageManager;
import android.util.Log;

public class MainActivity extends Activity implements LocationListener {
    protected LocationManager locationManager;
    protected LocationListener locationListener;
    protected Context context;
    TextView txtLat;
    String lat;
    String provider;
    protected String latitude, longitude;
    protected boolean gps_enabled, network_enabled;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtLat = (TextView) findViewById(R.id.textview1);

        if (ContextCompat.checkSelfPermission(this,
                android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
            try{
                locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
            } catch (SecurityException securityException) {
                txtLat.setText("Error");
            }
        }//end of if
        else{txtLat.setText("Error2");}
    }


    @Override
    public void onLocationChanged(Location location) {
        txtLat = (TextView) findViewById(R.id.textview1);
        txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());
    }

    @Override
    public void onProviderDisabled(String provider) {
        Log.d("Latitude", "disable");
    }

    @Override
    public void onProviderEnabled(String provider) {
        Log.d("Latitude", "enable");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Log.d("Latitude", "status");
    }
}

我在 list 中使用了正确的权限粗略位置、精细位置和互联网。它仍然显示错误 2,并且检查权限是一种奇怪的行为。如果可以,请帮助解决这个问题。

我已经一遍又一遍地检查了 android 开发人员和堆栈溢出,检查权限似乎并不直接。我可能不只是理解它的要点。

谢谢,

真诚的

肖恩

最佳答案

从 Android M 开始,仅在 list 中声明权限是不够的。您必须实现权限模型才能成功获得授予的权限。

查看您的代码,您缺少权限请求。关注这个official guile并实现权限模型以获得预期的结果。

    ActivityCompat.requestPermissions(thisActivity,
            new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION},
            MY_PERMISSIONS_REQUEST_LOCATION);

检查结果如下:

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_LOCATION: {
            //pare grantResults
            return;
        } 
    }
}

关于android - 检查 Android 位置管理器的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50807665/

相关文章:

java - 我的应用程序在 android studio 中崩溃了,在查看日志时我无法弄清楚出了什么问题

android - 为什么 LocationManager 初始化后为空?我正在尝试删除更新()

android - 访问 GPS 不工作。应用程序使用网络获取位置

android - 尝试从 SD 卡读取会抛出 UnauthorizedAccessException

android - React Native Expo 应用程序在 Play 管理中心错误地列出了详细信息

android - 如何在安卓平板电脑中隐藏底部系统栏

android - LocationManager 最佳实现?

android - 字符串值看起来相同,但彼此不是 ".equals()"

android - 如何增加 Android 微调器的可点击宽度?

Java 监听器方法参数