requestPermissions NameNotFoundException android M [英] requestPermissions NameNotFoundException android M

查看:100
本文介绍了requestPermissions NameNotFoundException android M的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

public static void requestPermissions(final Activity activity){

    System.out.println("Permission 0 : " + activity.getPackageName());

    int permission = activity.getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, activity.getPackageName());

    if(permission != PackageManager.PERMISSION_GRANTED){
        PackageManager pm = activity.getPackageManager();

        try {
            PackageInfo pi = pm.getPackageInfo(activity.getPackageName(), PackageManager.GET_ACTIVITIES);

            System.out.println("Permission package info : " + pi);
        } catch (NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println("Permission 1 : " + activity);
        ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0xFFEEDDCC);
    }
}

无论我如何尝试,我总是会得到以下结果:

No matter how I try it, I always get the following result:

10-19 17:35:31.642: I/System.out(27952): Permission 0 : com.example.testappandroid
10-19 17:35:31.643: I/System.out(27952): Permission package info : PackageInfo{7b81ba7 com.example.testappandroid}
10-19 17:35:31.643: I/System.out(27952): Permission 1 : com.example.testappandroid.MainActivity@c40298e
10-19 17:35:31.644: I/ActivityManager(862): START u0 {act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.google.android.packageinstaller cmp=com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity (has extras)} from uid 10109 on display 0
10-19 17:35:31.668: I/GrantPermissionsActivity(4527): No package: null
10-19 17:35:31.668: I/GrantPermissionsActivity(4527): android.content.pm.PackageManager$NameNotFoundException
10-19 17:35:31.668: I/GrantPermissionsActivity(4527):   at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:137)
10-19 17:35:31.668: I/GrantPermissionsActivity(4527):   at com.android.packageinstaller.permission.ui.GrantPermissionsActivity.getCallingPackageInfo(GrantPermissionsActivity.java:312)
10-19 17:35:31.668: I/GrantPermissionsActivity(4527):   at com.android.packageinstaller.permission.ui.GrantPermissionsActivity.onCreate(GrantPermissionsActivity.java:94)

这可能是一个非常简单的问题.正如从LogCat的日志中看到的那样,传递给函数requestPermissions的活动是主要活动. PackageManager.getPackageInfo()的用法似乎也是正确的,因为如果我将其隔离,它将按预期工作.

This is probably a very straightforward question. The activity being passed to the function requestPermissions is the main activity, as you can see in the logs from the LogCat. The usage of PackageManager.getPackageInfo() also seems correct, since if I isolate it, it works as expected.

Manifest.permission.WRITE_EXTERNAL_STORAGE也在清单中定义,如预期的那样.

Also, Manifest.permission.WRITE_EXTERNAL_STORAGE is defined in the Manifest, as it is expected.

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

编辑

一个重要的事实是,我的静态函数requestPermissions(Activity)是在外部库中定义的,该外部库称为utils.jar.因此,如果我在MainActivity.java中编写此代码:

An important fact is that my static function requestPermissions(Activity) is defined in an external library, called for instance utils.jar. So if I write this in my MainActivity.java:

protected void onStart(){
    super.onStart();
    final Activity act = this;
    Utils.requestPermissions(act); // in utils.jar
}

它将失败.如果我改写这个:

it will fail. If I write this instead:

protected void onStart(){
    super.onStart();
    final Activity act = this;
    ActivityCompat.requestPermissions(act, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}

它将按预期要求权限.

编辑结束

任何人以前都经历过这种情况并且可以阐明一些想法吗? 预先谢谢您.-

Has anyone experienced this before and can shed some light? Thank you in advance.-

推荐答案

只需在肯定的地方更改requestCode的值即可.

Just have to change value of requestCode on something positive.

ActivityCompat.requestPermissions在内部深处调用startActivityForResult并使用您的requestCode.如果为负,将引发与您相同的异常:

ActivityCompat.requestPermissions calls startActivityForResult somewhere deep inside and uses your requestCode. And if it is negative will be thrown exception same as you have:

I/GrantPermissionsActivity: No package: null
                            android.content.pm.PackageManager$NameNotFoundException

只需更改requestCode,它就可以像在应用程序中一样在库中工作. 例如:

Just change requestCode and it will be work as in an application so in a library. For example:

ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 101);

这篇关于requestPermissions NameNotFoundException android M的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆