【问题标题】:requestPermissions NameNotFoundException android MrequestPermissions NameNotFoundException android M
【发布时间】:2015-10-19 16:04:07
【问题描述】:

我有以下代码:

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

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

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)

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

此外,Manifest.permission.WRITE_EXTERNAL_STORAGE 在 Manifest 中定义,正如预期的那样。

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

编辑

一个重要的事实是我的静态函数 requestPermissions(Activity) 是在一个外部库中定义的,例如 utils.jar。所以如果我在我的 MainActivity.java 中写这个:

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

它会失败。如果我写这个:

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

它会按预期要求权限。

编辑结束

以前有没有人经历过这种情况并且可以提供一些启示? 提前谢谢你。-

【问题讨论】:

  • 我敢打赌你的 Utils.jar 不是 android 库,即 Android Studio 中的库模块。
  • 我在 Android 6.0 Nexus 6 (MRA58N) 上测试了您的代码。我用1 替换了请求代码0xFFEEDDCC(我相信这是一个错字)。我还在我的活动中直接定义了您的requestPermissions()。它奏效了。

标签: android android-activity android-permissions android-6.0-marshmallow


【解决方案1】:

只需将 requestCode 的值更改为积极的东西。

ActivityCompat.requestPermissions 在内部深处调用 startActivityForResult 并使用您的 requestCode。如果它是负数,则会抛出与您相同的异常:

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

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

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

【讨论】:

  • 这个项目前段时间关闭了,我想我为此做了一个解决方法。我无法再检查您的答案,但无论如何我都会将其标记为正确。谢谢!
【解决方案2】:

我认为接受的答案可能不正确,因为我使用了肯定请求密钥,但仍然收到此异常。我收到此异常的原因是因为我传递给requestPermission 方法的活动引用为空,即活动实际上在我请求权限之前已经完成,因此我收到了该异常。

因此请确保您传递给requestPermission 的活动/片段实例不为空。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多