android api 23对话框提醒权限不会出现

时间:2016-10-27 07:23:43

标签: android permissions alertdialog android-alertdialog

在我的应用程序中,我需要Android互联网权限。

我已在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 defaul配置具有正确的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个权限。

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

我在其他应用中使用此类请求没有问题

谢谢。

修改

对于所有评论,请输入以下内容: &#34;没有必要请求,因为:如果某个应用声明它需要正常权限,系统会自动向该应用授予权限#34;

这是正确的。 抱歉这个愚蠢的问题。 我知道默认许可的问题,但我的appa无论如何都没有用,因为它在Internet权限中给出了错误。 我创建了一个新的模拟器,现在似乎已经开始了。

3 个答案:

答案 0 :(得分:2)

并非所有权限都需要由用户授予。根据{{​​3}}

  

系统权限分为两类:普通和危险:

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

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

  •   

如果权限属于Android Documentation类别(例如:位置,存储,相机等),则只需要检查权限

答案 1 :(得分:0)

默认授予Internet权限。

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

答案 2 :(得分:0)

  

正常权限涵盖了您的应用需要访问数据的区域   应用程序沙箱之外的资源,但那里的资源非常少   对用户的隐私或其他应用程序的操作造成风险。对于   例如,设置时区的权限是正常权限。如果   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