Android权限处理——第三方库easypermissions使用

来源:互联网 发布:知乎注册在哪里 编辑:程序博客网 时间:2024/06/05 11:04

easypermissions地址

https://github.com/googlesamples/easypermissions

安装

easypermissions通过在你的build.gradle添加以下依赖安装

compile 'pub.devrel:easypermissions:0.4.2'

用法

为了使用EasyPermissions,在你的Activity (or Fragment)重写onRequestPermissionsResult方法

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        // Forward results to EasyPermissions        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);    }}

请求权限

下面的示例显示如何请求权限,需要相机和access_fine_location权限。有几件事需要注意:

  • 使用easypermissions #hasPermissions(…)来检查应用程序是否已经具有所需的权限。此方法可以以任意数量的权限作为最终参数。
  • 用EasyPermissions#requestPermissions来请求权限,此方法将请求系统权限,并显示必要时提供的理由字符串。提供的请求代码应该是这个请求唯一的,且该方法可以以任意数量的权限作为最终参数。
  • 使用AfterPermissionGranted。这是可选的,但使用简便。如果请求的权限全部被授权,相应请求码下的方法都将被执行。这是为了简化需要运行请求方法的公共流程。这也可以通过添加在onpermissions授予回调的逻辑来实现。

最后,为了更好的控制,使你的Activity / Fragment实现PermissionCallbacks接口

public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        // Forward results to EasyPermissions        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);    }    @Override    public void onPermissionsGranted(int requestCode, List<String> list) {        // Some permissions have been granted        // ...    }    @Override    public void onPermissionsDenied(int requestCode, List<String> list) {        // Some permissions have been denied        // ...    }}

必须的权限

在某些情况下,如果没有某些权限,应用程序将无法正常运行。如果用户用“永远不要再问”选项否认这些权限,您将无法从用户请求这些权限,并且必须在应用程序设置中更改这些权限。在这种情况下,你可以使用EasyPermissions.somePermissionPermanentlyDenied(…) 来显示一个对话框,让用户直接跳转到系统设置

@Overridepublic void onPermissionsDenied(int requestCode, List<String> perms) {    Log.d(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size());    // (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();    }}@Overridepublic 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, R.string.returned_from_app_settings_to_activity, Toast.LENGTH_SHORT)                .show();    }}
阅读全文
0 0