API级别19的grantUriPermission中的IllegalArgumentException [英] IllegalArgumentException in grantUriPermission on API level 19

查看:126
本文介绍了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);} 

http://developer.android.com/reference/android/content/ContentResolver.html#takePersistableUriPermission

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

http://developer.android.com/reference/android/content/ContentResolver.html#takePersistableUriPermission

这篇关于API级别19的grantUriPermission中的IllegalArgumentException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆