美文网首页
框架实现动态申请权限

框架实现动态申请权限

作者: 我弟是个程序员 | 来源:发表于2017-07-24 11:12 被阅读0次

    github上看到的一个项目easypermissions

    首先少不了添加依赖:

    dependencies {
        compile 'pub.devrel:easypermissions:0.4.2'
    }
    

    直接看代码更清晰,Activity和Fragment用法一致。如下:

    package com.dingfang.org.customdemo;
    
    import android.Manifest;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Toast;
    
    import java.util.List;
    
    import pub.devrel.easypermissions.AfterPermissionGranted;
    import pub.devrel.easypermissions.AppSettingsDialog;
    import pub.devrel.easypermissions.EasyPermissions;
    
    public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{
    
        private static final int RC_CAMERA_PERM = 123;
        
        private static final String TAG = "123456798";
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
        } 
    
        public void onclick(View view){
            cameraTask();
        }
    
        @AfterPermissionGranted(RC_CAMERA_PERM)
        public void cameraTask() {
            
            if (!EasyPermissions.hasPermissions(this, Manifest.permission.CALL_PHONE)) {
                // Have permission, do the thing!
                Toast.makeText(this, "TODO: Camera things", Toast.LENGTH_LONG).show();
            } else {
                // Ask for one permission
                EasyPermissions.requestPermissions(this,"This app needs access to your camera so you can take pictures.",
                        RC_CAMERA_PERM, Manifest.permission.CALL_PHONE);
            }
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            // Forward results to EasyPermissions
            EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
        }
    
    
        /**
         * 权限回调
         * @param requestCode
         * @param perms
         */
        @Override
        public void onPermissionsGranted(int requestCode, List<String> perms) {
            Log.d(TAG, "onPermissionsGranted:" + requestCode + ":" + perms.size());
        }
    
        /**
         * 权限回调
         * @param requestCode
         * @param perms
         */
        @Override
        public void onPermissionsDenied(int requestCode, List<String> perms) {
            // (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."
            // This will display a dialog directing them to enable the permission in app settings.
            if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
                new AppSettingsDialog.Builder(this).build().show();
            }
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
                // Do something after user returned from app settings screen, like showing a Toast.
                Toast.makeText(this, "Returned from app settings to MainActivity", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }
    
    

    方法讲解:

    • EasyPermissions#hasPermissions(...) to check if the app already has the required permissions. This method can take any number of permissions as its final argument.
      这就意味着也可以这么写:
        private void initPermission() {
            String[] perms = {Manifest.permission.CALL_PHONE
                    , Manifest.permission.WRITE_EXTERNAL_STORAGE
                    , Manifest.permission.READ_EXTERNAL_STORAGE};
    
            if (EasyPermissions.hasPermissions(this, perms)) {
                // Already have permission, do the thing
                // ...
            } else {
                // Do not have permissions, request them now
                EasyPermissions.requestPermissions(this, "因为功能需要,需要使用相关权限,请允许",
                        100, perms);
            }
        }
    
    • **EasyPermissions#requestPermissions. **This method will request the system permissions and show the rationale string provided if necessary. The request code provided should be unique to this request, and the method can take any number of permissions as its final argument.
    • ** AfterPermissionGranted** annotation. This is optional, but provided for convenience. If all of the permissions in a given request are granted, any methods annotated with the proper request code will be executed. This is to simplify the common flow of needing to run the requesting method after all of its permissions have been granted. This can also be achieved by adding logic on the onPermissionsGranted callback.

    相关文章

      网友评论

          本文标题:框架实现动态申请权限

          本文链接:https://www.haomeiwen.com/subject/duzvkxtx.html