Skip to content

VNETA/OneKeyPerm

 
 

Repository files navigation

OneKeyPerm

一键申请Android权限

OneKeyPerm接入说明

compile 'com.wanjian:onekeyperm:0.0.1'

OneKeyPerm不依赖任何业务Activity,支持多进程,只需一句静态代码就可以了

例如

申请权限被拒绝后 不会 自动开启设置页面让用户手动开启权限

OneKeyPerm.request(Manifest.permission.CAMERA, "您需要允许相机权限,否则无法使用扫码功能", new OneKeyPerm.OnPermResultListener() {
                    @Override
                    public void onPermResult(String perm, boolean isGrant) {
                        Toast.makeText(MainActivity.this, "请求相机权限 " + isGrant, Toast.LENGTH_SHORT).show();
                    }
                });

或者

申请权限被拒绝后  自动开启设置页面让用户手动开启权限

OneKeyPerm.request(Manifest.permission.CAMERA, "您需要允许相机权限,否则无法使用扫码功能", new OneKeyPerm.OnPermResultListener() {
                    @Override
                    public void onPermResult(String perm, boolean isGrant) {
                        Toast.makeText(MainActivity.this, "请求相机权限 " + isGrant, Toast.LENGTH_SHORT).show();
                    }
                },true);

接入

  • 在清单中添加自定义权限,例如:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wanjian.permission.demo">

    <!--permission中com.wanjian.permission.demo替换成你的包名-->
    <permission
        android:name="com.wanjian.permission.demo.permission.ONE_KEY_PERM"
        android:protectionLevel="signature" />

    <!--uses-permission中com.wanjian.permission.demo替换成你的包名-->
    <uses-permission android:name="com.wanjian.permission.demo.permission.ONE_KEY_PERM" />

  
</manifest>

其中: permission节点中name要替换成你的app的包名.permission.ONE_KEY_PERM, uses-permission节点中的name也要替换成你的app的包名.permission.ONE_KEY_PERM

  • 在Application中调用 OneKeyPerm.install(this);初始化,例如
public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        OneKeyPerm.install(this);
    }
}
  • 如果manifest.xml没有配置ONE_KEY_PERM权限的话,运行app会报错,直接把错误堆栈信息中的权限配置复制到manifest.xml中也可以

例如

 FATAL EXCEPTION: main
 Process: com.wanjian.permission.demo, PID: 6282
 java.lang.RuntimeException: Unable to create application com.wanjian.permission.demo.App: java.lang.RuntimeException: define and use permission in your manifest ! 
 example:
  <permission
         android:name="com.wanjian.permission.demo.permission.ONE_KEY_PERM"
         android:protectionLevel="signature" />
  <uses-permission android:name="com.wanjian.permission.demo.permission.ONE_KEY_PERM" />

之后就可以一句话申请权限了

原理分析

  • 每次通过context启动透明Activity(PermissionActivity)请求权限

  • 当权限被拒绝后启动另一个透明Activity (WatchAuthorizationActivity),在WatchAuthorizationActivity中再次启动应用详情设置Activity,然后在WatchAuthorizationActivityonActivityResult方法中再次检查是否已经手动授权,并通过广播(解决多进程问题)通知调用者

备注:收回授权后Android会重启App

About

一键申请Android权限,不依赖任何业务Activity。小巧、简约、强悍

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%