【问题标题】:android api 23 dialog alert permission does not appearandroid api 23 对话框提示权限不出现
【发布时间】:2016-10-27 07:23:42
【问题描述】:

在我的应用中,我需要安卓互联网权限。

我已在文件 AndroidManifest.xml 中插入权限(具有其他权限)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />

build.gradle 默认配置具有正确的 api 级别:

defaultConfig {
        applicationId "com.mytry"
        minSdkVersion 23
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

互联网通话的活动是这样的:

public class ActivityLoginScreen extends Activity{

    final int REQUEST_INTERNET = 1;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.INTERNET)) {
                //permesso già richiesto in precedenza. Negato dall'utente
            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.INTERNET}, REQUEST_INTERNET);
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case REQUEST_INTERNET: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this, "GRANTED", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "NO GRANTED", Toast.LENGTH_SHORT).show();
                }
                return;
            }
        }
    }

但是当我启动我的应用程序并进入活动时,什么都没有出现。 如果我进入应用设置模拟器,我只能看到 2 个权限。

这个问题的可能解决方案?我哪里错了?

我在其他应用中使用过这种类型的请求没有问题

谢谢。

编辑:

对于所有 cmets,请输入以下内容: “不需要请求,因为:如果一个应用声明它需要一个正常的权限,系统会自动将权限授予该应用”

这是正确的。 对不起这个愚蠢的问题。 我知道默认权限的问题,但我的 appa 无论如何都不起作用,因为它在 Internet 权限中给出了错误。 我创建了一个新的模拟器,现在似乎可以了。

【问题讨论】:

标签: android permissions android-alertdialog


【解决方案1】:

并非所有权限都需要由用户授予。根据Android Documentation

系统权限分为正常和危险两类:

  • 普通权限不会直接危及用户的隐私。如果您的应用在其清单中列出了正常权限,系统会自动授予该权限。

  • 危险的权限可以让应用访问用户的机密数据。如果您的应用在其清单中列出了正常权限,系统会自动授予该权限。如果您列出危险权限,用户必须明确批准您的应用。

如果权限属于dangerous permission类别(例如:位置、存储、相机等),您只需检查权限

【讨论】:

    【解决方案2】:

    默认授予 Internet 权限。

    它不需要用户授予它,因此您已经拥有互联网权限,只需启用您的互联网即可。

    【讨论】:

      【解决方案3】:

      普通权限涵盖您的应用需要访问数据或 应用程序沙箱之外的资源,但很少 对用户隐私或其他应用程序运行的风险。为了 例如,设置时区的权限是普通权限。如果 app声明它需要一个正常的权限,系统 自动授予应用程序权限。如需完整列表 当前正常权限,见Normal permissions

      从 API 级别 23 开始,以下权限被归类为 PROTECTION_NORMAL

      对于这些不会显示给用户的dailog,系统将自动授予权限。

      ACCESS_LOCATION_EXTRA_COMMANDS
      ACCESS_NETWORK_STATE
      ACCESS_NOTIFICATION_POLICY
      ACCESS_WIFI_STATE
      BLUETOOTH
      BLUETOOTH_ADMIN
      BROADCAST_STICKY
      CHANGE_NETWORK_STATE
      CHANGE_WIFI_MULTICAST_STATE
      CHANGE_WIFI_STATE
      DISABLE_KEYGUARD
      EXPAND_STATUS_BAR
      GET_PACKAGE_SIZE
      INSTALL_SHORTCUT
      INTERNET
      KILL_BACKGROUND_PROCESSES
      MODIFY_AUDIO_SETTINGS
      NFC
      READ_SYNC_SETTINGS
      READ_SYNC_STATS
      RECEIVE_BOOT_COMPLETED
      REORDER_TASKS
      REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
      REQUEST_INSTALL_PACKAGES
      SET_ALARM
      SET_TIME_ZONE
      SET_WALLPAPER
      SET_WALLPAPER_HINTS
      TRANSMIT_IR
      UNINSTALL_SHORTCUT
      USE_FINGERPRINT
      VIBRATE
      WAKE_LOCK
      WRITE_SYNC_SETTINGS
      

      所有危险的 Android 系统权限都属于权限组。 如果设备运行的是 Android 6.0(API 级别 23)

      PROTECTION_DANGEROUS 权限:

      这些权限将向用户显示对话框。Sample Code

      READ_CALENDAR
      WRITE_CALENDAR
      CAMERA
      READ_CONTACTS
      WRITE_CONTACTS
      GET_ACCOUNTS
      ACCESS_FINE_LOCATION
      ACCESS_COARSE_LOCATION
      RECORD_AUDIO
      READ_PHONE_STATE
      CALL_PHONE
      READ_CALL_LOG
      WRITE_CALL_LOG
      ADD_VOICEMAIL
      USE_SIP
      PROCESS_OUTGOING_CALLS
      BODY_SENSORS
      SEND_SMS
      RECEIVE_SMS
      READ_SMS
      RECEIVE_WAP_PUSH
      RECEIVE_MMS
      READ_EXTERNAL_STORAGE
      WRITE_EXTERNAL_STORAGE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        • 2021-03-06
        • 1970-01-01
        相关资源
        最近更新 更多