diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
new file mode 100644
index 0000000..d244a3a
Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..681f41a
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index de24430..7a8e390 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,8 +1,10 @@
+
-
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 436e7e2..726ced0 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,6 +2,9 @@
+
+
+
diff --git a/README.md b/README.md
index 0ffc723..e5333eb 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,7 @@
### OneKeyPerm接入说明
-` compile 'com.wanjian:onekeyperm:0.0.3' `
-
+
OneKeyPerm不依赖任何业务Activity,支持多进程,只需一句静态代码就可以了
@@ -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();
@@ -27,7 +26,7 @@ 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();
@@ -35,75 +34,13 @@ OneKeyPerm.request(Manifest.permission.CAMERA, "您需要允许相机权限,
},true);
```
-### 接入
-
-* 在清单中添加自定义权限,例如:
-
-```html
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-其中:
-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:
-
-
-
-
-```
-
-之后就可以一句话申请权限了
### 原理分析
* 每次通过context启动透明Activity`(PermissionActivity)`请求权限
-* 当权限被拒绝后启动另一个透明Activity `(WatchAuthorizationActivity)`,在`WatchAuthorizationActivity`中再次启动应用详情设置Activity,然后在`WatchAuthorizationActivity`的`onActivityResult`方法中再次检查是否已经手动授权,并通过广播(解决多进程问题)通知调用者
+* 当权限被拒绝后启动另一个透明Activity `(WatchAuthorizationActivity)`,在`WatchAuthorizationActivity`中再次启动应用详情设置Activity,然后在`WatchAuthorizationActivity`的`onActivityResult`方法中再次检查是否已经手动授权,并通过Binder(解决多进程问题)通知调用者
备注:收回授权后Android会重启App
diff --git a/app/build.gradle b/app/build.gradle
index 209b595..008102d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -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')
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 44e66c1..1843fd9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,14 +2,6 @@
-
-
-
-
-
-
diff --git a/app/src/main/java/com/wanjian/permission/demo/App.java b/app/src/main/java/com/wanjian/permission/demo/App.java
index 4143650..2c8ac22 100644
--- a/app/src/main/java/com/wanjian/permission/demo/App.java
+++ b/app/src/main/java/com/wanjian/permission/demo/App.java
@@ -13,6 +13,5 @@ public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
- OneKeyPerm.install(this);
}
}
diff --git a/app/src/main/java/com/wanjian/permission/demo/MainActivity.java b/app/src/main/java/com/wanjian/permission/demo/MainActivity.java
index 6ad636d..906a667 100644
--- a/app/src/main/java/com/wanjian/permission/demo/MainActivity.java
+++ b/app/src/main/java/com/wanjian/permission/demo/MainActivity.java
@@ -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();
@@ -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();
diff --git a/app/src/main/java/com/wanjian/permission/demo/SecondAct.java b/app/src/main/java/com/wanjian/permission/demo/SecondAct.java
index 154b073..6da5589 100644
--- a/app/src/main/java/com/wanjian/permission/demo/SecondAct.java
+++ b/app/src/main/java/com/wanjian/permission/demo/SecondAct.java
@@ -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();
diff --git a/build.gradle b/build.gradle
index e6b32bc..ac470f7 100644
--- a/build.gradle
+++ b/build.gradle
@@ -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
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index f0a4e09..1a1b711 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -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
diff --git a/permission/build.gradle b/permission/build.gradle
index f0f23bc..2d0ebc4 100644
--- a/permission/build.gradle
+++ b/permission/build.gradle
@@ -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'
}
}
diff --git a/permission/src/main/java/com/wanjian/permission/Check.java b/permission/src/main/java/com/wanjian/permission/Check.java
deleted file mode 100644
index 001ddb6..0000000
--- a/permission/src/main/java/com/wanjian/permission/Check.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.wanjian.permission;
-
-import android.content.Context;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PermissionInfo;
-import android.support.v4.content.ContextCompat;
-
-import static android.content.pm.PermissionInfo.PROTECTION_SIGNATURE;
-
-/**
- * Created by wanjian on 2018/1/9.
- */
-
-class Check {
- static void hasDefinePermission(Context context) {
- try {
- String packName = context.getPackageName();
- String perm = packName.concat(".permission.ONE_KEY_PERM");
- PackageManager pm = context.getPackageManager();
-
- PackageInfo pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS);
-
- if (pi.permissions == null) {
- log(packName);
- return;
- }
- for (PermissionInfo permission : pi.permissions) {
- if (perm.equals(permission.name)
- && permission.protectionLevel == PROTECTION_SIGNATURE
- && ContextCompat.checkSelfPermission(context, perm) == PackageManager.PERMISSION_GRANTED) {
- return;
- }
- }
- log(packName);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
-
- }
-
- private static void log(String packName) {
- String definePerm = (" ").replace("$", packName);
-
-
- String usePerm = " \n".replace("$", packName);
-
- new RuntimeException("define and use permission in your manifest ! \nexample:\n".concat(definePerm).concat("\n").concat(usePerm)).printStackTrace();
- }
-}
diff --git a/permission/src/main/java/com/wanjian/permission/OneKeyPerm.java b/permission/src/main/java/com/wanjian/permission/OneKeyPerm.java
index 450fa3d..c7ec117 100644
--- a/permission/src/main/java/com/wanjian/permission/OneKeyPerm.java
+++ b/permission/src/main/java/com/wanjian/permission/OneKeyPerm.java
@@ -1,12 +1,18 @@
package com.wanjian.permission;
import android.app.Application;
-import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.os.Binder;
import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
/**
@@ -16,27 +22,10 @@
public class OneKeyPerm {
static final String TIPS = "tips";
- static String ONE_KEY_PERM;
- static String ONE_KEY_PERM_MANU;
- static String BROADCAST_PERM;
- private static Context sContext;
+ static final String RECEIVER = "receiver";
+ static final String ONE_KEY_PERM = OneKeyPerm.class.getName();
- public static void install(Application application) {
- if (application == null) {
- throw new IllegalArgumentException("application can not be null !");
- }
- sContext = application.getApplicationContext();
- Check.hasDefinePermission(sContext);
- ONE_KEY_PERM = sContext.getPackageName() + "/" + OneKeyPerm.class.getName();
- ONE_KEY_PERM_MANU = ONE_KEY_PERM + "/manu/";
- BROADCAST_PERM = sContext.getPackageName() + ".permission.ONE_KEY_PERM";
- }
-
- public static void request(final String permission, String tips, final OnPermResultListener listener) {
-
- if (sContext == null) {
- throw new IllegalStateException("init OneKeyPerm first !");
- }
+ public static void request(Context context,final String permission, String tips, final OnPermResultListener listener) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
if (listener != null) {
listener.onPermResult(permission, true);
@@ -44,73 +33,84 @@ public static void request(final String permission, String tips, final OnPermRes
return;
}
- int permissionCheck = ContextCompat.checkSelfPermission(sContext, permission);
+ int permissionCheck = ContextCompat.checkSelfPermission(context, permission);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
if (listener != null) {
listener.onPermResult(permission, true);
}
return;
}
- String filter = ONE_KEY_PERM + "/" + permission;
- sContext.registerReceiver(new BroadcastReceiver() {
+ Intent intent = new Intent(context, PermissionActivity.class);
+ intent.putExtra(ONE_KEY_PERM, permission);
+ intent.putExtra(TIPS, tips);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ Bundle bundle = new Bundle();
+ bundle.putBinder(RECEIVER, new Binder() {
@Override
- public void onReceive(Context context, Intent intent) {
- sContext.unregisterReceiver(this);
+ protected boolean onTransact(int code, @NonNull Parcel data, @Nullable Parcel reply, int flags) throws RemoteException {
if (listener != null) {
- int result = intent.getIntExtra(permission, 1);
- if (result == PackageManager.PERMISSION_GRANTED || result == PackageManager.PERMISSION_DENIED) {
- listener.onPermResult(permission, result == PackageManager.PERMISSION_GRANTED);
- }
+ String permission = data.readString();
+ int result = data.readInt();
+ setPermResult(listener, permission, result == PackageManager.PERMISSION_GRANTED);
}
+ return true;
}
- }, new IntentFilter(filter), BROADCAST_PERM, null);
+ });
+ intent.putExtras(bundle);
- Intent intent = new Intent(sContext, PermissionActivity.class);
- intent.putExtra(ONE_KEY_PERM, permission);
- intent.putExtra(TIPS, tips);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- sContext.startActivity(intent);
+ context.startActivity(intent);
}
- public static void request(final String permission, final String tips, final OnPermResultListener listener, boolean manualuthorize) {
+ public static void request(final Context context, final String permission, final String tips, final OnPermResultListener listener, boolean manualuthorize) {
if (manualuthorize) {
- request(permission, tips, new OnPermResultListener() {
+ request(context,permission, tips, new OnPermResultListener() {
@Override
public void onPermResult(String perm, boolean isGrant) {
if (!isGrant) {
- watchAuthorization(listener, tips, perm);
+ watchAuthorization(context,listener, tips, perm);
} else if (listener != null) {
- listener.onPermResult(perm, isGrant);
+ setPermResult(listener, perm, isGrant);
}
}
});
} else {
- request(permission, tips, listener);
+ request(context,permission, tips, listener);
}
}
- private static void watchAuthorization(final OnPermResultListener listener, String tips, final String permission) {
- String filter = ONE_KEY_PERM_MANU + "/" + permission;
- sContext.registerReceiver(new BroadcastReceiver() {
+ private static void watchAuthorization(Context context, final OnPermResultListener listener, String tips, final String permission) {
+ Intent intent = new Intent(context, WatchAuthorizationActivity.class);
+ intent.putExtra(ONE_KEY_PERM, permission);
+ intent.putExtra(TIPS, tips);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ Bundle bundle = new Bundle();
+ bundle.putBinder(RECEIVER, new Binder() {
@Override
- public void onReceive(Context context, Intent intent) {
- sContext.unregisterReceiver(this);
+ protected boolean onTransact(int code, @NonNull Parcel data, @Nullable Parcel reply, int flags) throws RemoteException {
if (listener != null) {
- int result = intent.getIntExtra(permission, 1);
- if (result == PackageManager.PERMISSION_GRANTED || result == PackageManager.PERMISSION_DENIED) {
- listener.onPermResult(permission, result == PackageManager.PERMISSION_GRANTED);
- }
+ String permission = data.readString();
+ int result = data.readInt();
+ setPermResult(listener, permission, result == PackageManager.PERMISSION_GRANTED);
}
+ return true;
}
- }, new IntentFilter(filter), BROADCAST_PERM, null);
-
- Intent intent = new Intent(sContext, WatchAuthorizationActivity.class);
- intent.putExtra(ONE_KEY_PERM, permission);
- intent.putExtra(TIPS, tips);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- sContext.startActivity(intent);
+ });
+ intent.putExtras(bundle);
+ context.startActivity(intent);
}
+ private static void setPermResult(final OnPermResultListener listener, final String perm, final boolean result) {
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ listener.onPermResult(perm, result);
+ } else {
+ new Handler(Looper.getMainLooper()).post(new Runnable() {
+ @Override
+ public void run() {
+ listener.onPermResult(perm, result);
+ }
+ });
+ }
+ }
public interface OnPermResultListener {
void onPermResult(String perm, boolean isGrant);
}
diff --git a/permission/src/main/java/com/wanjian/permission/PermissionActivity.java b/permission/src/main/java/com/wanjian/permission/PermissionActivity.java
index bdbb1bc..4714f2f 100644
--- a/permission/src/main/java/com/wanjian/permission/PermissionActivity.java
+++ b/permission/src/main/java/com/wanjian/permission/PermissionActivity.java
@@ -4,6 +4,9 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.RemoteException;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
@@ -12,8 +15,8 @@
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
-import static com.wanjian.permission.OneKeyPerm.BROADCAST_PERM;
import static com.wanjian.permission.OneKeyPerm.ONE_KEY_PERM;
+import static com.wanjian.permission.OneKeyPerm.RECEIVER;
import static com.wanjian.permission.OneKeyPerm.TIPS;
@@ -23,16 +26,21 @@
public class PermissionActivity extends AppCompatActivity {
private final int REQUEST_CODE = 1;
-
+ private IBinder receiver;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
+ Bundle bundle = intent.getExtras();
+ if (bundle != null) {
+ receiver = bundle.getBinder(RECEIVER);
+ }
final String perm = intent.getStringExtra(ONE_KEY_PERM);
- if (TextUtils.isEmpty(perm)) {
+ if (TextUtils.isEmpty(perm) || receiver == null) {
finish();
return;
}
+
if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this, perm)) {
@@ -59,15 +67,11 @@ public void onClick(DialogInterface dialog, int which) {
// result of the request.
}
} else {
- Intent result = new Intent(ONE_KEY_PERM + "/" + perm);
- result.putExtra(perm, PackageManager.PERMISSION_GRANTED);
- result.setPackage(getPackageName());
- sendBroadcast(result, BROADCAST_PERM);
+ setResult(perm,PackageManager.PERMISSION_GRANTED);
finish();
}
}
-
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
@@ -78,11 +82,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
// permission was granted, yay! Do the
// contacts-related task you need to do.
-
- Intent intent = new Intent(ONE_KEY_PERM + "/" + permissions[0]);
- intent.putExtra(permissions[0], grantResults[0]);
- intent.setPackage(getPackageName());
- sendBroadcast(intent, BROADCAST_PERM);
+ setResult(permissions[0], grantResults[0]);
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
@@ -93,6 +93,17 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
}
}
+ private void setResult(String perm, int result) {
+ Parcel parcel = Parcel.obtain();
+ parcel.writeString(perm);
+ parcel.writeInt(result);
+ try {
+ receiver.transact(0, parcel, Parcel.obtain(), IBinder.FLAG_ONEWAY);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
@Override
public void finish() {
super.finish();
diff --git a/permission/src/main/java/com/wanjian/permission/WatchAuthorizationActivity.java b/permission/src/main/java/com/wanjian/permission/WatchAuthorizationActivity.java
index ed7e0d3..8be9623 100644
--- a/permission/src/main/java/com/wanjian/permission/WatchAuthorizationActivity.java
+++ b/permission/src/main/java/com/wanjian/permission/WatchAuthorizationActivity.java
@@ -3,6 +3,9 @@
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.RemoteException;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
@@ -10,9 +13,8 @@
import android.text.TextUtils;
import android.widget.Toast;
-import static com.wanjian.permission.OneKeyPerm.BROADCAST_PERM;
import static com.wanjian.permission.OneKeyPerm.ONE_KEY_PERM;
-import static com.wanjian.permission.OneKeyPerm.ONE_KEY_PERM_MANU;
+import static com.wanjian.permission.OneKeyPerm.RECEIVER;
import static com.wanjian.permission.OneKeyPerm.TIPS;
/**
@@ -61,11 +63,16 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
private void onResult() {
- int permState = ContextCompat.checkSelfPermission(this, perm);
- Intent result = new Intent(ONE_KEY_PERM_MANU + "/" + perm);
- result.putExtra(perm, permState);
- result.setPackage(getPackageName());
- sendBroadcast(result, BROADCAST_PERM);
+ IBinder receiver = getIntent().getExtras().getBinder(RECEIVER);
+ int result = ContextCompat.checkSelfPermission(this, perm);
+ Parcel parcel = Parcel.obtain();
+ parcel.writeString(perm);
+ parcel.writeInt(result);
+ try {
+ receiver.transact(0, parcel, Parcel.obtain(), IBinder.FLAG_ONEWAY);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
finish();
overridePendingTransition(0, 0);
}