Java Android运行时权限对话框未显示

Java Android运行时权限对话框未显示,java,android,permissions,Java,Android,Permissions,我试图在运行时获得访问位置的权限(来自运行Android 6.0以上版本的用户)。这在我的主应用程序中不成功,因此我尝试制作一个测试应用程序,其唯一目的是向用户请求位置权限 我遇到的问题是没有向用户显示任何权限对话框-从logcat中,我可以看到“onRequestPermissionsResult”方法正在直接运行(不要求用户接受权限),它显示未授予权限 在阅读了关于这个主题的其他问题之后,我再次检查了“使用权限”行是否在我的Android清单XML文件中,但没有找到任何其他解决方案 这是我的

我试图在运行时获得访问位置的权限(来自运行Android 6.0以上版本的用户)。这在我的主应用程序中不成功,因此我尝试制作一个测试应用程序,其唯一目的是向用户请求位置权限

我遇到的问题是没有向用户显示任何权限对话框-从logcat中,我可以看到“onRequestPermissionsResult”方法正在直接运行(不要求用户接受权限),它显示未授予权限

在阅读了关于这个主题的其他问题之后,我再次检查了“使用权限”行是否在我的Android清单XML文件中,但没有找到任何其他解决方案

这是我的密码:

package com.user.testapplication;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

private static final int REQUEST_LOCATION_ID = 1;
private static final String TAG = MainActivity.class.getSimpleName();

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

private void checkLocationPermissions(){
    if (ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            Log.i(TAG, "Device version above 6.0 - Requesting location permissions.");
            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_LOCATION_ID);
        }

    }
}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_LOCATION_ID: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.i(TAG, "Permissions granted successfully!");

            } else {
                Log.i(TAG, "Permissions were not granted.");
            }
            return;
        }
    }//end switch
}

}//end class
我的舱单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.user.testapplication">

<uses-permission android:name="android.permisssion.ACCESS_FINE_LOCATION"/>
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
</application>
非常感谢您的帮助-我想我可能只是遗漏了一些东西。

在onStart()方法中使用此方法,它将解决您的问题

 //This checks for the permission
    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
    {

        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)){


            // You can show your dialog message here but instead I am 
            // showing the grant permission dialog box
            ActivityCompat.requestPermissions(this, new String[] {
                            Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.ACCESS_COARSE_LOCATION },
                    10);



        }
        else{

            //Requesting permission
            ActivityCompat.requestPermissions(this, new String[] {
                            Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.ACCESS_COARSE_LOCATION },
                    10);
        }
    }

显示无
对话框的原因是
AndroidManifest
中的一个输入错误,您可以看到权限拼写为
android permission
,而不是
android permission

,我也有同样的问题,我的问题是我在manifest中写了以下行

<permission android:name="android.permission.ACCESS_FINE_LOCATION" />

而不是

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


谢谢你的回复,杰克,不幸的是我仍然有同样的问题。活动显示在屏幕上,但不提示输入任何权限。使用日志检查,onStart方法运行,if语句的第二个分支执行。屏幕上不显示任何框,并调用requestPermissionsResult方法,导致“未授予权限”输出到日志中。可能的原因是,一旦第一次显示该权限框,您将选择显示“不再显示此项”的复选框然后你拒绝了这个许可。你可以做的是清除应用程序的数据,然后再次运行,或者干脆卸载应用程序,然后再次安装。希望它能工作。我卸载了应用程序,然后再次运行程序,得到了相同的结果。我想知道是否需要调用任何显式暂停,或者Android中是否需要/可能需要“等待输入”?当然,在您的活动中,您需要做一些实际需要许可的事情,否则该框将永远不会显示。比如,如果你想获得电话身份(IMEI号码)的许可,那么应该添加这一行来使用电话身份许可,否则权限框就不会出现
TelephonyManager mngr=(TelephonyManager)getSystemService(Context.TELEPHONY_服务);字符串id=mngr.getDeviceId()谢谢,我不知道这一点,我想这就是为什么盒子没有显示出来的原因。您是在发出需要电话标识的请求之前检查权限,还是之后在catch块中检查异常?
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />