3

我有以下代码: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); 
    } 
} 

不管我如何努力,我总是得到以下结果:

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 : [email protected] 
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()的使用似乎也是正确的,因为如果我将它隔离开来,它可以按预期工作。

此外,Manifest.permission.WRITE_EXTERNAL_STORAGE在Manifest中定义,因为它是预期的。

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

编辑

一个重要的事实是,我的静态函数requestPermissions(活动)外部库定义,称为例如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); 
} 

它会询问权限是否符合预期。编辑

末有没有人经历过这个,可以提供一些线索? 谢谢你提前.-

+0

我敢打赌,你的Utils.jar不是一个机器人库,即Android Studio中一库模块。 – greywolf82

+0

我在Android 6.0 Nexus 6(MRA58N)上测试了您的代码。我用'1'替换了请求代码0xFFEEDDCC(我相信这是一个错字)。我还在我的活动中直接定义了你的'requestPermissions()'。有效。 – cuihtlauac

回答

2

只需要改变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); 
+0

这个项目前一段时间已经关闭了,我想我为此做了一个解决方法。我再也无法检查你的答案,但我会标记为正确无论如何。谢谢! – nokto

相关问题