Skip to content

Commit

Permalink
no message
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangqinghua.wanjian committed Aug 10, 2020
1 parent 1ab17e6 commit 535bde2
Show file tree
Hide file tree
Showing 18 changed files with 248 additions and 220 deletions.
Binary file added .idea/caches/build_file_checksums.ser
Binary file not shown.
116 changes: 116 additions & 0 deletions .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 18 additions & 3 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

71 changes: 4 additions & 67 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@

### OneKeyPerm接入说明

` compile 'com.wanjian:onekeyperm:0.0.3' `



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

Expand All @@ -14,7 +13,7 @@ OneKeyPerm不依赖任何业务Activity,支持多进程,只需一句静态
```java
申请权限被拒绝后 不会 自动开启设置页面让用户手动开启权限

OneKeyPerm.request(Manifest.permission.CAMERA, "您需要允许相机权限,否则无法使用扫码功能", new OneKeyPerm.OnPermResultListener() {
OneKeyPerm.request(application, Manifest.permission.CAMERA, "您需要允许相机权限,否则无法使用扫码功能", new OneKeyPerm.OnPermResultListener() {
@Override
public void onPermResult(String perm, boolean isGrant) {
Toast.makeText(MainActivity.this, "请求相机权限 " + isGrant, Toast.LENGTH_SHORT).show();
Expand All @@ -27,83 +26,21 @@ OneKeyPerm.request(Manifest.permission.CAMERA, "您需要允许相机权限,
```java
申请权限被拒绝后 会 自动开启设置页面让用户手动开启权限

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

### 接入

* 在清单中添加自定义权限,例如:

```html

<?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);`初始化,例如

```java


public class App extends Application {

@Override
public void onCreate() {
super.onCreate();
OneKeyPerm.install(this);
}
}


```
* 如果manifest.xml没有配置`ONE_KEY_PERM`权限的话,运行app会报错,直接把错误堆栈信息中的权限配置复制到manifest.xml中也可以

例如

```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,然后在`WatchAuthorizationActivity``onActivityResult`方法中再次检查是否已经手动授权,并通过广播(解决多进程问题)通知调用者
* 当权限被拒绝后启动另一个透明Activity `(WatchAuthorizationActivity)`,在`WatchAuthorizationActivity`中再次启动应用详情设置Activity,然后在`WatchAuthorizationActivity``onActivityResult`方法中再次检查是否已经手动授权,并通过Binder(解决多进程问题)通知调用者


备注:收回授权后Android会重启App
Expand Down
4 changes: 1 addition & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,5 @@ dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26+'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
// implementation project(':permission')
// https://jcenter.bintray.com/com/wanjian/onekeyperm/0.0.1/
compile 'com.wanjian:onekeyperm:0.0.3'
implementation project(':permission')
}
8 changes: 0 additions & 8 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,6 @@
<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" />

<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/com/wanjian/permission/demo/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,5 @@ public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
OneKeyPerm.install(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OneKeyPerm.request(Manifest.permission.CAMERA, "您需要允许相机权限,否则无法使用扫码功能", new OneKeyPerm.OnPermResultListener() {
OneKeyPerm.request(getApplication(), Manifest.permission.CAMERA, "您需要允许相机权限,否则无法使用扫码功能", new OneKeyPerm.OnPermResultListener() {
@Override
public void onPermResult(String perm, boolean isGrant) {
Toast.makeText(MainActivity.this, "请求相机权限 " + isGrant, Toast.LENGTH_SHORT).show();
Expand All @@ -34,7 +34,7 @@ public void onPermResult(String perm, boolean isGrant) {
findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OneKeyPerm.request(Manifest.permission.READ_EXTERNAL_STORAGE, "您需要允许读取文件权限,否则无法查看图片", new OneKeyPerm.OnPermResultListener() {
OneKeyPerm.request(getApplication(), Manifest.permission.READ_EXTERNAL_STORAGE, "您需要允许读取文件权限,否则无法查看图片", new OneKeyPerm.OnPermResultListener() {
@Override
public void onPermResult(String perm, boolean isGrant) {
Toast.makeText(MainActivity.this, "请求读取权限 " + isGrant, Toast.LENGTH_SHORT).show();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OneKeyPerm.request(Manifest.permission.READ_EXTERNAL_STORAGE, "需要读取文件", new OneKeyPerm.OnPermResultListener() {
OneKeyPerm.request(getApplication(), Manifest.permission.READ_EXTERNAL_STORAGE, "需要读取文件", new OneKeyPerm.OnPermResultListener() {
@Override
public void onPermResult(String perm, boolean isGrant) {
Toast.makeText(SecondAct.this, "请求读取权限 " + isGrant, Toast.LENGTH_SHORT).show();
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.android.tools.build:gradle:3.6.1'


// NOTE: Do not place your application dependencies here; they belong
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Fri Dec 29 16:28:14 CST 2017
#Mon Aug 10 21:27:31 CST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
3 changes: 2 additions & 1 deletion permission/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ dependencies {
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.android.tools.build:gradle:3.6.1'
classpath 'com.novoda:bintray-release:0.8.0'
}
}
Expand Down
Loading

0 comments on commit 535bde2

Please sign in to comment.