API级别19的grantUriPermission中的IllegalArgumentException [英] IllegalArgumentException in grantUriPermission on API level 19
本文介绍了API级别19的grantUriPermission中的IllegalArgumentException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面的代码行
context.getApplicationContext().grantUriPermission(packageName,uri,Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
在具有API级别19(KitKat)的设备上运行但不在更高版本上运行时引发此异常:
java.lang.IllegalArgumentException:请求的标志0x40,但仅允许0x3在android.os.Parcel.readException(Parcel.java:1476)在android.os.Parcel.readException(Parcel.java:1426)在android.app.ActivityManagerProxy.grantUriPermission(ActivityManagerNative.java:3461)在android.app.ContextImpl.grantUriPermission(ContextImpl.java:1732)在android.content.ContextWrapper.grantUriPermission(ContextWrapper.java:577)
为什么会这样?
解决方案
我相信这是由于KitKat中添加的更改引起的,该更改应具有固定的内容访问权限,但他们将其破坏了.
您需要使用Build.VERSION.SDK_INT<19(即KitKat之前的版本)
if(Build.VERSION.SDK_INT< 19){context.getApplicationContext().grantUriPermission(packageName,uri,Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);} 别的 {takePersistableUriPermission(packageName,uri);}
The following line of code
context.getApplicationContext().grantUriPermission(packageName, uri, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
raises this exception when running on devices with API level 19 (KitKat), but not on later versions:
java.lang.IllegalArgumentException: Requested flags 0x40, but only 0x3 are allowed
at android.os.Parcel.readException(Parcel.java:1476)
at android.os.Parcel.readException(Parcel.java:1426)
at android.app.ActivityManagerProxy.grantUriPermission(ActivityManagerNative.java:3461)
at android.app.ContextImpl.grantUriPermission(ContextImpl.java:1732)
at android.content.ContextWrapper.grantUriPermission(ContextWrapper.java:577)
Why is that so?
解决方案
I believe this is caused by a change added in KitKat which should have fixed content access but they broke it.
You would need to run a check using Build.VERSION.SDK_INT < 19 (ie. pre-KitKat)
if(Build.VERSION.SDK_INT < 19) {
context.getApplicationContext().grantUriPermission(packageName, uri, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
} else {
takePersistableUriPermission(packageName, uri);
}
这篇关于API级别19的grantUriPermission中的IllegalArgumentException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文