【问题标题】:LocationManager.getProviders() returns empty list depending on target API levelLocationManager.getProviders() 根据目标 API 级别返回空列表
【发布时间】:2021-02-03 12:12:13
【问题描述】:

考虑以下代码,我用它来准备读取位置。

LocationManager locationManager = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE);
List<String> listProviders = locationManager.getProviders (true);

在 Android 清单中使用 &lt;uses-sdk android:minSdkVersion="16" /&gt;,代码可以完美运行。但是当我将android:targetSdkVersion="23" 添加到这一行时,listProviders 每次都是一个空列表。因此我无法访问位置提供程序。我做错了什么?

我已经在三星 Galaxy S5 上进行了测试,即 Android 6.0.1(API 级别 23)。

【问题讨论】:

  • 转到您的应用程序的设备设置,如果不允许,则查看是否有位置权限,如果运行正确则运行,然后添加权限

标签: android android-gps


【解决方案1】:
  1. 为请求代码声明一个 int 变量。

    private static final int REQUEST_CODE_PERMISSION = 2;

  2. 用您需要的权限名称声明一个字符串。

    String mPermission = Manifest.permission.ACCESS_FINE_LOCATION,

  3. 下一步检查 onCreate 方法的运行时权限条件,

    try {
                 if (ActivityCompat.checkSelfPermission(this, mPermission)
                         != MockPackageManager.PERMISSION_GRANTED) {
    
                     ActivityCompat.requestPermissions(this,
                             mPermission, REQUEST_CODE_PERMISSION);
    
                   // If any permission above not allowed by user, this condition will execute every time, else your else part will work
                 } 
             } catch (Exception e) {
                 e.printStackTrace();
             }
    
  1. 现在声明 onRequestPermissionsResult 方法来检查请求代码,

     @Override
     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
         Log.e("Req Code", "" + requestCode);
         if (requestCode == REQUEST_CODE_PERMISSION) {
             if (grantResults.length == 1 &&
                     grantResults[0] == MockPackageManager.PERMISSION_GRANTED ) {
    
                // Success Stuff here
    
             }
          else{
                // Failure Stuff
            }
         }
    
     }
    

如果您声明了任何危险权限,并且如果您的应用安装在运行 Android 6.0(API 级别 23)或更高版本的设备上,您必须在运行时按照 the steps in this guide 请求危险权限

【讨论】:

    猜你喜欢
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多