requestPermissions NameNotFoundException android M

给你一囗甜甜゛ 提交于 2019-12-10 19:44:24

问题


I have the following code:

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)

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.

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

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

EDIT

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);
}

It will ask for the permissions as expected.

End of EDIT

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


回答1:


Just have to change value of requestCode on something positive.

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

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);



回答2:


I think the accepted answer may not be correct because I have used positive request key but still still getting this exception. The reason why I was getting this exception is because the activity reference that I was passing to requestPermission method is null i.e., the activity has actually finished before I was requesting the permission and hence I was getting that exception.

So make sure that the activity/fragment instance that you are passing to requestPermission is not null.

Hope this helps.



来源:https://stackoverflow.com/questions/33219034/requestpermissions-namenotfoundexception-android-m

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!