请求权限 NameNotFoundException android M
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 : 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 的 activity 是主要的 activity,正如您在 LogCat 的日志中看到的那样。 PackageManager.getPackageInfo() 的用法似乎也是正确的,因为如果我隔离它,它会按预期工作。
此外,Manifest.permission.WRITE_EXTERNAL_STORAGE 已在清单中定义,正如预期的那样。
<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);
}
它将按预期请求权限。
编辑结束
有没有人以前经历过这个并且可以阐明一些问题?
提前谢谢你。-
只需更改 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);
我认为接受的答案可能不正确,因为我使用了肯定的请求密钥,但仍然出现此异常。我收到此异常的原因是因为我传递给 requestPermission
方法的 activity 引用为空,即 activity 在我请求权限之前实际上已经完成,因此我得到那个例外。
因此请确保您传递给 requestPermission
的 activity/fragment 实例不为空。
希望对您有所帮助。
我有以下代码:
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 的 activity 是主要的 activity,正如您在 LogCat 的日志中看到的那样。 PackageManager.getPackageInfo() 的用法似乎也是正确的,因为如果我隔离它,它会按预期工作。
此外,Manifest.permission.WRITE_EXTERNAL_STORAGE 已在清单中定义,正如预期的那样。
<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);
}
它将按预期请求权限。
编辑结束
有没有人以前经历过这个并且可以阐明一些问题? 提前谢谢你。-
只需更改 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);
我认为接受的答案可能不正确,因为我使用了肯定的请求密钥,但仍然出现此异常。我收到此异常的原因是因为我传递给 requestPermission
方法的 activity 引用为空,即 activity 在我请求权限之前实际上已经完成,因此我得到那个例外。
因此请确保您传递给 requestPermission
的 activity/fragment 实例不为空。
希望对您有所帮助。