Giter Site home page Giter Site logo

yanzhenjie / andpermission Goto Github PK

View Code? Open in Web Editor NEW
6.6K 6.6K 1.1K 1.63 MB

:strawberry: Permissions manager for Android platform.

Home Page: https://yanzhenjie.com/AndPermission

License: Apache License 2.0

Java 100.00%
android-permission permission runtime-permission

andpermission's People

Contributors

baoti avatar ficat avatar seventhmoon avatar yanzhenjie avatar ysbing avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

andpermission's Issues

魅族Pro6 Android6.0 权限问题

最近在学习运行时权限,遇到个问题,我在设置中禁止了相机权限,进入应用获取拍照权限,按理说应该获取权限失败,但是系统显示相机权限授权成功,进入相机后因没有获取成功权限,导致相机界面异常。
如何解决?试了小米 华为 都没有问题,魅族出现了这个奇葩问题

红米Node3 获取SD卡权限反回结果问题

经过反复测试得出如下结论

targetSdkVersion <23  时
一般厂商应用不申请 运行时权限可以正常使用

红米Node3
SD卡的读写权限不会提示用户拒绝或接受

Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE

ActivityCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE) ;
永远等于 PackageManager.PERMISSION_GRANTED

因此会造成检测有权限却无法使用的情况

一次性申请多个权限,拒绝其中一个没有调用rationale

我一次性调用多个权限
`AndPermission.with(this)
.requestCode(100)
.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA)
.rationale((requestCode, rationale) ->
// 此对话框可以自定义,调用rationale.resume()就可以继续申请。
AndPermission.rationaleDialog(SplashActivity.this, rationale).show()
)
.send();

@OverRide
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}

@PermissionYes(100)
private void getLocationYes(List<String> grantedPermissions) {
    checkAccountLogin();
}

// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionNo(100)
private void getLocationNo(List<String> deniedPermissions) {
    // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
    if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
        // 第一种:用默认的提示语。
        AndPermission.defaultSettingDialog(this, 300).show();
    }
}`

拒绝了其中某个权限,没有显示AndPermission.rationaleDialog,退出后重新进入有显示。

反射异常

System.err: java.lang.reflect.InvocationTargetException
System.err: at java.lang.reflect.Method.invoke(Native Method)
System.err: at com.yanzhenjie.permission.AndPermission.callbackAnnotation(AndPermission.java:344)
System.err: at com.yanzhenjie.permission.AndPermission.onRequestPermissionsResult(AndPermission.java:284)
最后问题定位到
AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);

Fragment嵌套Fragment申请权限

使用Fragment嵌套Fragment,进行权限申请,由于无法回调onRequestPermissionsResult()导致不能正确回调权限申请结果。这个有办法解决吗

有android.support.v4.app.Fragment中使用的例子吗?

我想问一下在android.support.v4.app.Fragment怎样使用?能不能写个例子?我用了报这个错误:

E/AndPermission: Not found the callback method, do you forget @PermissionYes or @permissionNo for callback method ? Or you can use PermissionListener.

小米4 Android6.0.1定位权限问题

在第一次申请定位权限时,我拒绝了定位权限,然后我去设置里手动开启定位权限,开启app也显示定位权限已经获得,但事实上是没办法定位。然后我在去手动关闭定位权限,重新开启app,可以跳出申请权限的对话框,这样就可以获得定位权限。

发现一个bug

最后一个else if分支少了一个return呀。

class PermissionUtils {
    static Context getContext(Object o) {
        if (o instanceof Activity)
            return (Activity) o;
        else if (o instanceof Fragment)
            return ((Fragment) o).getActivity();
        else if (o instanceof android.app.Fragment)
            ((android.app.Fragment) o).getActivity();
        throw new IllegalArgumentException("The " + o.getClass().getName() + " is not support.");
    }

华为荣耀7的权限申请的问题

使用群主的下载管理 第一次安装在下载管理里面直接显示下载出错 并且报错权限不全 所以我就用了大神你的权限管理 可以弹出权限申请框 并且我也允许了 但是会显示权限申请失败 但是下载管理里面下载就可以成功了 所以我想问下 到底权限申请成功了没有 很疑惑

部分文件没有打到jar包中

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.yanzhenjie.alertdialog.AlertDialog"
jar包中没有包含AlertDialog相关的代码?

授权无法获取

当用户第一次就点拒绝授权的时候,当再次点需要获取权限的按钮时,提示无法获取权限,无法调起需要获取权限的Dilaog了

拒绝一次权限,并勾选禁止。。。不再提示 ,手机设置还原为提示,再次点击还是弹出禁止dialog

调用:
AndPermission.with(this) .requestCode(PermissionsUtils.CAMERA_CODE) .permission(Manifest.permission.CAMERA) .callback(this) .rationale(rationaleListener) .start();
自定义dialog:
`private RationaleListener rationaleListener = new RationaleListener() {
@OverRide
public void showRequestPermissionRationale(int requestCode, final Rationale rationale) {
// 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
mSelectDialog = new SelectDialog.Builder(HomeChildMoreActivity.this)
.setMessage("友情提示")
.setTitle("你已拒绝过定位权限,沒有定位定位权限无法为你推荐附近的妹子,你看着办!")
.setTitleColor(getResources().getColor(R.color.theme))
.setNegativeButton(getString(R.string.permission_button_item_refuse), new SelectDialog.OnNegativeClickListener() {
@OverRide
public void onClick(SelectDialog dialog, Button button) {
dialog.dismiss();
rationale.cancel();
}
})
.setPositiveButton(getString(R.string.permission_button_item_agree), new SelectDialog.OnPositiveClickListener() {
@OverRide
public void onClick(SelectDialog dialog, Button button) {
dialog.dismiss();
rationale.resume();
}
})
.build();

        mSelectDialog.show();
    }
};`

1.第一次点击后,弹出系统权限弹窗dialog,然后勾选、拒绝,第二次进来显示这个弹窗 (正常)
2.打开手机权限管理设置所有权限为:“提示”,再次点击,为什莫还是弹出这个弹窗,不应该是系统的权限弹窗dialog吗?hasAlwaysDeniedPermission(。。。)

AS编译错误

我用1.0.5版本编译时没问题的 但是使用1.0.7的时候 编译出现这个错误

Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.3.1) from [com.android.support:appcompat-v7:25.3.1] AndroidManifest.xml:27:9-31 	is also present at [com.android.support:cardview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38 value=(26.0.0-alpha1). 	Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:25:5-27:34 to override.

我的gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.3'

    defaultConfig {
        applicationId "com.remoteyourcam.usb"
        minSdkVersion 14
        targetSdkVersion 24
    }

    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }

    buildTypes {
        release {
            minifyEnabled false//不混淆 目前混淆编译之后会出问题
            proguardFiles 'proguard.cfg'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

dependencies {
    compile files('libs/acra-4.2.3-sources.jar')
    compile files('libs/acra-4.2.3.jar')
    compile 'com.zhy:okhttputils:2.6.2'
    compile 'com.tencent.bugly:crashreport:latest.release'
    compile files('libs/jackson-databind-2.6.0-rc4.jar')
    compile files('libs/jackson-core-2.6.0-rc4.jar')
    compile files('libs/jackson-annotations-2.6.0-rc4.jar')
    compile 'com.zhy:autolayout:1.4.5'
    compile files('libs/universal-image-loader-1.9.5.jar')
    compile 'com.yanzhenjie:permission:1.0.5'
    compile 'com.android.support:cardview-v7:26.0.0-alpha1'
    compile 'com.umeng.analytics:analytics:latest.integration'
}

小弟菜鸟 还请严大看看 什么情况 感谢!

魅族MX6和oppo R8207测试失败

1.魅族MX6 andorid6.0版本,测试失败,直接下载严神demo,在我的手机上无法弹出对话框,而是直接弹出toast,说权限申请成功,但是其实没有成功,我去设置中心查看权限,(允许,询问,拒绝),显示的是---询问.
2.oppo R8207 android4.4.4 前两种点击效果和魅族MX6一样,只弹toast说成功,但是实际上并没有成功, 选择第三种listener方式时发现永远都是权限申请失败的弹框.
希望大神可以跟踪一下,或者加我qq我提供机器测试:1179917630

在小米的安卓6.0上存在问题

和其它的权限申请库一样,我在小米6.0和一加7.1上测试了此库和easyPermission和RxPermission,在小米的6.0设备上三个库均无法获取定位权限(ACCESS_FINE_LOCATION),一加7.1的设备没有问题,建议修改一下README,以免对其他人产生误解。

Android 7.0 NullPointerException,6.0运行正常

03-07 08:33:12.666 29428-29428/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: www.diandou, PID: 29428
java.lang.RuntimeException: Unable to start activity ComponentInfo{www.diandou/www.diandou.activity.SplashActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'yanzhenjie.permission.e yanzhenjie.permission.e.a(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2661)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2722)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6114)
at java.lang.reflect.Method.invoke(Native Method)
at android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874)
at android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
Caused by: java.lang.NullPo

如下错误 设备机型 乐视 LE X820 Android 6.0.1,level 23

java.lang.RuntimeException:Unable to start activity ComponentInfo{cn.xm.xmvideoplayer/com.xm.xmvideo.ui.activity.HomeActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.lbe.security.miui (has extras) }
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2473)

android.content.ActivityNotFoundException:No Activity found to handle Intent { act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.lbe.security.miui (has extras) }
android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805)
android.app.Instrumentation.execStartActivity(Instrumentation.java:1634)
 android.app.Activity.startActivityForResult(Activity.java:4622)
android.app.Activity.requestPermissions(Activity.java:3888)
android.support.v4.app.ActivityCompatApi23.requestPermissions(ActivityCompatApi23.java:45)
android.support.v4.app.ActivityCompat.requestPermissions(ActivityCompat.java:372)
 com.yanzhenjie.permission.DefaultPermission.void requestPermissions(java.lang.Object,int,java.lang.String[])(DefaultPermission.java:140)
 com.yanzhenjie.permission.DefaultPermission.java.lang.String[] access$000(com.yanzhenjie.permission.DefaultPermission)(DefaultPermission.java:33)
##_parent_##2##_parent_##
##_child_## void access$300(java.lang.Object,int,java.lang.String[],int[])##_child_##
 ##_child_## void access$500(java.lang.Object,int,java.lang.String[])##_child_##
com.yanzhenjie.permission.DefaultPermission$1.void resume()(DefaultPermission.java:88)
 com.yanzhenjie.permission.DefaultPermission.void send()(DefaultPermission.java:115)
 com.xm.xmvideo.ui.activity.HomeActivity.void check()(HomeActivity.java:104)
 com.xm.xmvideo.ui.activity.HomeActivity.void initViews(android.os.Bundle)(HomeActivity.java:92)
com.ximencx.comment_lib.Base.BaseCompatActivity.void onCreate(android.os.Bundle)(BaseCompatActivity.java:43)
 android.app.Activity.performCreate(Activity.java:6321)
 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2535)
 android.app.ActivityThread.access$1100(ActivityThread.java:154)
 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394)
 android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:148)
 android.app.ActivityThread.main(ActivityThread.java:5561)
 java.lang.reflect.Method.invoke(Native Method)
 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 de.robv.android.xposed.XposedBridge.main(XposedBridge.java:153)

源码中send方法关于6.0以下判断权限是否获取的代码是无效的对吗?

这只是判断mainfest中是否配置了该权限 开发人员一定会配置的 因此本人认为这段代码逻辑可以修改下

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
      Context context = PermissionUtils.getContext(object);
      final int[] grantResults = new int[permissions.length];
      PackageManager packageManager = context.getPackageManager();
      String packageName = context.getPackageName();

      final int permissionCount = permissions.length;
      for (int i = 0; i < permissionCount; i++) {
            grantResults[i] = packageManager.checkPermission(permissions[i], packageName);
      }
      onRequestPermissionsResult(object, requestCode, permissions, grantResults);
}

没有谈成对话框

作者您好,我的vivo手机在测试的时候直接进入权限申请成功或者失败的回调,没有弹出对话框让用户选择,请问一下这是什么问题呢?

通知类短信权限

这种类型的权限有办法知道有没有打开么?好像授权是没有方式的,只有设置界面小米,华为直接不能设置

回调问题

获取相机权限
用的是注解回调
点击不在提醒并且拒绝,
多次点击后,
会调用成功的方法

授权回调,注解方法不起作用

android.support.v4.app.Fragment的子类中测试相机授权,可授权成功,但无法进行回调,提示以下内容:

E/AndPermission: Not found the callback method, do you forget @PermissionYes or @permissionNo for callback method ? Or you can use PermissionListener.

Fragment中代码如下:

发送授权:

private void sendCameraPermission(){
    if(PermissionUtil.hasCameraPermission(getContext())){
        startScanFragment();
    }else{
        PermissionUtil.sendCameraPermission(this);
    }
}
// =======================================================
// 权限处理方法 =============================================
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    PermissionUtil.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}

/**
 * 相机权限被授权时处理
 */
@PermissionYes(PermissionUtil.PERMISSION_CAMERA_CODE)
public void whenGrantedCameraPermission(List<String> grantedPermissions){
    startScanFragment();
}

/**
 * 相机权限被拒绝时处理
 */
@PermissionNo(PermissionUtil.PERMISSION_CAMERA_CODE)
public void whenDeniedCameraPermission(List<String> deniedPermissions){
    // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
    if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
        AndPermission.defaultSettingDialog(this, PermissionUtil.PERMISSION_CAMERA_CODE)
                .setTitle("缺少权限")
                .setMessage("我们需要权限调用摄像头进行二维码扫描哦!")
                .setPositiveButton("去设置")
                .setNegativeButton("拒绝", null)
                .show();
    }
}

封装的调用方法与文档的一致

// 发送权限申请
AndPermission.with(fragment)
                .requestCode(requestCode)
                .permission(permissions)
                .send();

// 结果回调
AndPermission.onRequestPermissionsResult(fragment, requestCode, permissions, grantResults);

请问了解这大概是什么原因造成的呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.