【问题标题】:Android Marshmallow permissions? [closed]Android棉花糖权限? [关闭]
【发布时间】:2016-03-19 05:49:52
【问题描述】:

我想在用户可以接受该权限访问的地方显示权限提示,就像我想访问用户联系人一样,我想显示带有两个选项的提示,允许和拒绝任何示例和源代码。

【问题讨论】:

    标签: android android-permissions android-6.0-marshmallow android-runtime


    【解决方案1】:

    这样做

    private void PerrmissionWork() {
    
        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.ACCESS_COARSE_LOCATION))
            permissionsNeeded.add("GPS COARSE");
    
    
        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;
        }
        splashMainWork();
    }
    
    // mapWork();
    
    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,
            android.content.DialogInterface.OnClickListener onClickListener) {
        new AlertDialog.Builder(context).setMessage(message)
                .setPositiveButton("OK", onClickListener).setCancelable(false)
                .setNegativeButton("Cancel", null).create().show();
    
    }
    
    @Override
    public 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.ACCESS_COARSE_LOCATION,
                    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.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
                    ) {
                // All Permissions Granted
                splashMainWork();
            } else {
                // Permission Denied
                Toast.makeText(context, "Some Permission is Denied",
                        Toast.LENGTH_SHORT).show();
            }
        }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions,
                    grantResults);
        }
    }
    

    并像这样在创建时调用此方法..

        if (Build.VERSION.SDK_INT >= 23) {
            PerrmissionWork();
        } else {
           splashMainWork();
        }
    

    我在初始工作方法中获取位置,并使用位置权限,您可以使用联系权限并代替初始工作做您的联系代码.. 还有很多演示也可用尝试谷歌他们可以给你很好的解释..并且对开发者坐姿也有很好的解释。
    here ..Try this blog very helpful

    【讨论】:

    • 感谢您的回答,工作..!!!
    • @NightFury.. 我的荣幸..
    【解决方案2】:

    查看https://developer.android.com/training/permissions/requesting.html 获取有关请求权限的官方文档。这是使用该文档的示例类:

    public class PermissionCheck {
    
    
        private void requestIfNeeded() {
            // Here, thisActivity is the current activity
            if (ContextCompat.checkSelfPermission(thisActivity,
                            Manifest.permission.READ_CONTACTS)
                    != PackageManager.PERMISSION_GRANTED) {
    
                // Should we show an explanation?
                if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                        Manifest.permission.READ_CONTACTS)) {
    
                    // Show an expanation to the user *asynchronously* -- don't block
                    // this thread waiting for the user's response! After the user
                    // sees the explanation, try again to request the permission.
    
                } else {
    
                    // No explanation needed, we can request the permission.
    
                    ActivityCompat.requestPermissions(thisActivity,
                            new String[]{Manifest.permission.READ_CONTACTS},
                            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    
                    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                    // app-defined int constant. The callback method gets the
                    // result of the request.
                }
            }
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode,
                String permissions[], int[] grantResults) {
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
                        // permission was granted, yay! Do the
                        // contacts-related task you need to do.
                        handleSuccessfulPermissionsRequest();
    
                    } else {
    
                        // permission denied, boo! Disable the
                        // functionality that depends on this permission.
                        handlePermissionDenied();
                    }
                    return;
                }
    
                // other 'case' lines to check for other
                // permissions this app might request
            }
        }
    
        private void handleSuccessfulPermissionsRequest() {
                Toast.makeText(this, "Request Successful!",Toast.LENGTH_SHORT).show();
        }
    
        private void handlePermissionDenied() {
            Toast.makeText(this, "Request Denied!",Toast.LENGTH_SHORT).show();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      相关资源
      最近更新 更多