android–checkSelfPermission方法在targetSdkVersion 22中不起作用

android–checkSelfPermission方法在targetSdkVersion 22中不起作用,第1张

概述CheckSelfPermission方法没有按预期工作,它总是在android6.0(Marshmallow)中返回零.因为目标sdk是22,我正在使用httpClient进行网络连接.以下是代码段.privatevoidinsertDummyContactWrapper(){List<String>permissionsNeeded=newArrayList<String>();final

CheckSelfPermission方法没有按预期工作,它总是在android 6.0(Marshmallow)中返回零.因为目标sdk是22,我正在使用http ClIEnt进行网络连接.以下是代码段.

private voID insertDummyContactWrapper() {    List<String> permissionsNeeded = new ArrayList<String>();    final List<String> permissionsList = new ArrayList<String>();    if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION))        permissionsNeeded.add("GPS");    if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS))        permissionsNeeded.add("Read Contacts");    if (!addPermission(permissionsList, Manifest.permission.WRITE_CONTACTS))        permissionsNeeded.add("Write Contacts");    if (permissionsList.size() > 0) {        if (permissionsNeeded.size() > 0) {            // Need Rationale            String message = "You need to grant access to " + permissionsNeeded.get(0);            for (int i = 1; i < permissionsNeeded.size(); i++)                message = message + ", " + permissionsNeeded.get(i);            showMessageOKCancel(message,                    new DialogInterface.OnClickListener() {                        @OverrIDe                        public voID onClick(DialogInterface dialog, int which) {                            requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),                                    REQUEST_CODE_ASK_MulTIPLE_PERMISSIONS);                        }                    });            return;        }        requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),                REQUEST_CODE_ASK_MulTIPLE_PERMISSIONS);        return;    }    insertDummyContact();}@TargetAPI(Build.VERSION_CODES.M)private boolean addPermission(List<String> permissionsList, String permission) {    if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {        permissionsList.add(permission);        // Check for Rationale Option        if (!shouldShowRequestPermissionRationale(permission)) return false;    }    return true;}private voID showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {    new AlertDialog.Builder(MainActivity.this)            .setMessage(message)            .setPositivebutton("OK", okListener)            .setNegativebutton("Cancel", null)            .create()            .show();}@OverrIDepublic voID onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {    switch (requestCode) {        case REQUEST_CODE_ASK_MulTIPLE_PERMISSIONS: {            Map<String, Integer> perms = new HashMap<String, Integer>();            // Initial            perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);            perms.put(Manifest.permission.READ_CONTACTS, PackageManager.PERMISSION_GRANTED);            perms.put(Manifest.permission.WRITE_CONTACTS, PackageManager.PERMISSION_GRANTED);            // Fill with results            for (int i = 0; i < permissions.length; i++)                perms.put(permissions[i], grantResults[i]);            // Check for ACCESS_FINE_LOCATION            if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED) {                // All Permissions Granted                insertDummyContact();            } else {                // Permission DenIEd                Toast.makeText(MainActivity.this, "Some Permission is DenIEd", Toast.LENGTH_SHORT)                        .show();            }        }        break;        default:            super.onRequestPermissionsResult(requestCode, permissions, grantResults);    }}"

解决方法:

Context#checkSelfPermission(String)方法已添加到API 23.同样在API 23之下,由于始终授予权限,因此它毫无意义.在处理权限之前检查API版本

private voID insertDummyContactWrapper() {    // the only way we insert the dummy contact if if we are below M.    // Else we continue on and prompt the user for permissions    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {        insertDummyContact();        return;    }    List<String> permissionsNeeded = new ArrayList<String>();    final List<String> permissionsList = new ArrayList<String>();    if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION))        permissionsNeeded.add("GPS");    if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS))        permissionsNeeded.add("Read Contacts");    if (!addPermission(permissionsList, Manifest.permission.WRITE_CONTACTS))        permissionsNeeded.add("Write Contacts");    if (permissionsList.size() > 0) {        if (permissionsNeeded.size() > 0) {            // Need Rationale            String message = "You need to grant access to " + permissionsNeeded.get(0);            for (int i = 1; i < permissionsNeeded.size(); i++)                message = message + ", " + permissionsNeeded.get(i);            showMessageOKCancel(message,                    new DialogInterface.OnClickListener() {                        @OverrIDe                        public voID onClick(DialogInterface dialog, int which) {                            requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),                                    REQUEST_CODE_ASK_MulTIPLE_PERMISSIONS);                        }                    });            return;        }        requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),                REQUEST_CODE_ASK_MulTIPLE_PERMISSIONS);    }}

参考:http://developer.android.com/reference/android/content/Context.html#checkSelfPermission(java.lang.String)

总结

以上是内存溢出为你收集整理的android – checkSelfPermission方法在targetSdkVersion 22中不起作用全部内容,希望文章能够帮你解决android – checkSelfPermission方法在targetSdkVersion 22中不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1103702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存