{"id":20247646,"url":"https://github.com/ryensx/permissionannotationdemo","last_synced_at":"2025-04-10T21:33:00.942Z","repository":{"id":113636564,"uuid":"201076090","full_name":"RyensX/PermissionAnnotationDemo","owner":"RyensX","description":"AOP方式实现的（动态）权限注解库","archived":false,"fork":false,"pushed_at":"2020-02-11T15:50:02.000Z","size":168,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-24T19:01:52.183Z","etag":null,"topics":["android","java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RyensX.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-07T15:20:54.000Z","updated_at":"2023-05-29T04:29:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"ae5c6574-c8a5-4a84-b977-51f8508091c2","html_url":"https://github.com/RyensX/PermissionAnnotationDemo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyensX%2FPermissionAnnotationDemo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyensX%2FPermissionAnnotationDemo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyensX%2FPermissionAnnotationDemo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyensX%2FPermissionAnnotationDemo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RyensX","download_url":"https://codeload.github.com/RyensX/PermissionAnnotationDemo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248302077,"owners_count":21081005,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","java"],"created_at":"2024-11-14T09:38:33.369Z","updated_at":"2025-04-10T21:33:00.935Z","avatar_url":"https://github.com/RyensX.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PermissionAnnotation\n\n- **AOP框架实现**\n- **完全注解使用**\n\n## 引入\n### 注意，PermissionAnnotation只能在AS上使用（因为用了AOP框架）\n先在根目录build.gradle的dependencies里添加\n```gradle\ndependencies {\n        ...\n        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'\n}\n```\nSync一下，然后在app的build.gradle顶部加上\n```gradle\napply plugin: 'android-aspectjx'\n```\n最后在下方dependencies里加上\n```gradle\ndependencies {\n        ...\n        implementation ('com.su:PermissionAnnotation:1.0.4')\n}\n```\n\n## 使用\n\nPermissionAnnotation目前有三种注解，分别是\n```Java\n@Permission\n@APermission\n@PermissionDenial\n```\n### @Permission和@APermission\n\n`@Permission`和`@APermission`都是申请权限的注解，不同的地方在于\n```Java\n@Permission \n//注解的方法可以有返回值，但无论申请成功与否都会执行\n\n@APermission \n//注解的方法不可有返回值，但它可以根据申请情况决定是否调用，也就是只有成功申请到权限才会成功调用\n```\n两个注解均支持同时申请多个权限，且支持指定requestCode。具体属性值如下\n\n属性          | 类型      | 说明                 |默认值\n------------- | ---------| -------------------- |---------------\nvalue         | String[] | 存放权限             | 无，必须指定\n requsetCode  | int      | 申请权限时的请求码    |100/200\ndenialMsg     | String   | 默认拒绝提示显示的msg | [DEFAULT_MSG](https://github.com/Ryensu/PermissionAnnotationDemo/blob/master/permissionannotation/src/main/java/com/su/permissionannotation/Permission/PermissionUtils.java)\n\n在需要申请权限的方法头上加`@Permission`或`@APermission`即可在被调用时申请权限，如\n```Java\n//支持申请ROOT权限，权限值是PermissionUtils.ROOT_PERMISSION。若是权限组中有ROOT则ROOT会被优先向系统申请\n@Permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)\n    private int testMethod0(int t) {\n        Log.d(\"测试\", \"testMethod0\" + t);\n        return t;\n    }\n\n@Permissions(value = Manifest.permission.WRITE_EXTERNAL_STORAGE, denialMsg = \"测试msg\")\n    public int testMethod(int t) {\n        Log.d(\"测试\", \"testMethod\" + t);\n        return t;\n    }\n\n@APermissions(value = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE}, requestCode = 111)\n    private void testMethod2(int t) {\n        Log.d(\"测试\", \"testMethod2\" + t);\n    }\n```\n\n### @PermissionDenial\n`@PermissionDenial`是权限拒绝回调注解。被`@PermissionDenia`注解的方法会在被用户拒绝授予权限时执行（若勾选了不再提示则不会调用），如\n```Java\n@PermissionDenial(requestCode = 111)\n    private void testMethod2Denial() {\n        Toast.makeText(this, \"testMethod2方法申请权限被拒绝的回调方法\", Toast.LENGTH_SHORT).show();\n    }\n```\n该注解必须指定requsetCode且`不能为默认值100/200`\u0026\u0026`应该\u003e0`以和对应的权限申请操作绑定\n### 默认拒绝回调\n若在使用`@Permission`或`@APermission`时不指定requsetCode则会走默认提供的拒绝提示\n```Java\n    //默认权限说明\n    public static void showDefaultMsg(Context context, String msg) {\n        AlertDialog alertDialog = new AlertDialog.Builder(context)\n                .setTitle(\"权限说明\")\n                .setMessage(msg)\n                .setNegativeButton(\"了解\", null)\n                .create();\n        alertDialog.show();\n    }\n```\n其中`msg`就是具体说明，如果在使用申请权限的注解时不指定`denialMsg`则显示默认值[DEFAULT_MSG](https://github.com/Ryensu/PermissionAnnotationDemo/blob/master/permissionannotation/src/main/java/com/su/permissionannotation/Permission/PermissionUtils.java)\n\n基本情况就是这样了，欢迎star\n\n### 其他\n[使用的AOP框架](https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryensx%2Fpermissionannotationdemo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryensx%2Fpermissionannotationdemo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryensx%2Fpermissionannotationdemo/lists"}