当前位置: 首页 > 知识库问答 >
问题:

在清单中授予了ACCESS\u FINE\u位置,但始终拒绝获得权限?

曾飞雨
2023-03-14

我目前正在尝试获取用户当前位置的经纬度。我已在清单中启用以下权限。TargetSDK和min sdk是23

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.name.app">


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="false" />


    <activity
        android:name=".SplashScreen"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".MainMenu" />
    <activity
        android:name=".NeedToKnow" />
    <activity
        android:name=".SelectTopic" />
    <activity
        android:name=".DisplayTopicInformation"/>
    <activity
        android:name=".SelectCheckList" />
    <activity
        android:name=".ViewCheckList"/>
    <activity
        android:name=".FindLocation"></activity>
</application>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


</manifest>

为了做到这一点,我知道我需要对权限执行运行时检查。然而,当我执行以下操作时,我总是得到-1作为回报。(权限被拒绝)

int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(),
            Manifest.permission.ACCESS_FINE_LOCATION);

尝试访问当前位置时是否缺少步骤?

完整代码如下:

private String getZipcodeFromCurrentLocation() {

    int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(),
            Manifest.permission.ACCESS_FINE_LOCATION);

    String zip = null;
    Location location = null;
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            latitude = location.getLatitude();
            longitude = location.getLongitude();

            Log.i("updated lat", String.valueOf(latitude));
            Log.i("updated lng", String.valueOf(longitude));
        }


    };

    try {
        if (PackageManager.PERMISSION_GRANTED == permissionCheck) {
            lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
        }

    } catch (SecurityException e){
        e.printStackTrace();
    }
    return zip;

}

共有1个答案

潘彦
2023-03-14

如果用户在手机设置中禁用了应用程序的位置权限,则您必须请求该权限。在下面,您将找到一段关于如何做到这一点的代码示例。

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;

public class MyActivity extends Activity implements  ActivityCompat.OnRequestPermissionsResultCallback {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        boolean permissionGranted = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;

        if(permissionGranted) {
            // {Some Code}
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 200);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 200: {
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // {Some Code}
                }
            }
        }
    }
}

此外,我还构建了一个类来处理上述所有内容并返回用户的位置。这是链接:https://www.dropbox.com/s/2mkyjok6mpna2yw/GPS.java?dl=0.

 类似资料:
  • 我在清单中添加了对外部存储设备的写访问权限,并在我的Android手机中授予了这些权限。如果他们不存在,我甚至会在执行时要求他们。 然而,我总是得到这个例外: Java语言io。FileNotFoundException:/storage/simulated/03b3d97bd-5186-4506-97dc-9994b7ce0761(权限被拒绝) 你知道为什么吗? 在清单文件中:

  • SDK path c:\sdk\flutter\bin 项目路径C:\work\AutoDatas3\UI\auto_datas 我用admin打开cmd,一张CD C:\ work \ autodatas 3 \ UI \ auto _ datas 颤振运行有: 颤振酒吧得到: 拒绝访问:权限拒绝 颤振医生 医生总结(要查看所有细节,运行flutter doctor -v): [√]颤动(通道稳

  • 我分配一个角色权限来创建数据库。相同的角色被分配给登录用户,但是当我试图使用分配角色的登录用户创建新数据库时,我得到权限拒绝错误。 无法执行语句。权限拒绝,数据库主,所有者dbo。运行此命令需要以下权限:CREATE DATABASE。赛贝斯错误代码=10331严重级别=14,状态=3,事务状态=0第1行 我用15.5分和16分试了一下。我做错什么了吗?我们需要考虑其他参数吗?我经历了这次讨论 h

  • 问题内容: 我在注册后使用以下方法进行程序化登录 用户已通过身份验证,但始终具有ROLE_ANONYMOUS我不知道为什么?有任何想法吗 ? 问题答案: 这种现象看起来很奇怪。Javi建议手动将安全性上下文持久化到会话中,但是应该由Spring Security的自动完成。 一个可能的原因,我可以想像是在你的登记处理的页面。 禁用指定URL的所有安全过滤器。如你所见,它可能会干扰Spring Se

  • 配置: 我正在使用JWT,所以我有一个过滤器来创建基于它的用户: 我的userDetailsService填充GrantedAuthorities: