【问题标题】:Oracle MAF and requesting permissions in Android 6.0 (API level 23)Android 6.0(API 级别 23)中的 Oracle MAF 和请求权限
【发布时间】:2016-09-22 09:32:32
【问题描述】:

我有一个使用设备相机拍照的 MAF 应用程序。一切正常,直到我在运行 API 23 的 S6 上对其进行了测试,但它崩溃了:

java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=3432, uid=10060 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

据我所知,这是因为 Android 在新 API 中处理权限的方式,此处注明:

https://developer.android.com/training/permissions/requesting.html

从 Android 6.0(API 级别 23)开始,用户在应用运行时授予应用权限,而不是在安装应用时。

所以我按照说明如何在运行时请求权限(我已经安装了 Android 支持库),问题是,方法签名如下所示:

int checkSelfPermission (Context context, 
            String permission)

我找不到获取上下文引用的方法(提供的链接中的示例也使用了 Activity,同样的问题)。我只是不知道如何从 MAF 中执行此操作,因为它似乎没有暴露 Application/Activity 对象。

我尝试在我的一个类中简单地扩展 Activity 并尝试使用 this 调用 checkSelfPermission 方法,但是在阅读了 Activity 是什么之后我得到了运行时错误,我明白为什么这是错误的。

tl:dr

我们如何使用 oracle 的移动应用程序框架处理新的 Android 6(API 级别 23)运行时权限请求?

编辑: 因此,根据 cmets 中的讨论,我们可以看到该应用程序应该在 Android 6 上仍能正常运行,即使您没有在运行时请求权限。 所以我查看了 MAF 在构建时生成的 AndroidManifest.xml 文件,我可以看到权限(来自上述异常)android.permission.READ_EXTERNAL_STORAGE 不存在:

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  <uses-permission android:name="android.permission.VIBRATE"/>
  <uses-permission android:name="android.permission.READ_CONTACTS"/>
  <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.WAKE_LOCK"/>
  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
  <permission android:name="com.bsaf.atlas.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
  <uses-permission android:name="com.bsaf.atlas.permission.C2D_MESSAGE"/>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.INTERNET"/>

另外有趣的是,GPS 位置也没有更新,并且日志不断发布:

07-07 02:07:13.089  2174  2174 E LocationProvider: Caught security exception registering for location updates from system. This should only happen in DumpRenderTree.

所以我的下一个问题是,我如何影响 MAF 中的 AndroidManifest.xml?为什么要在位置更新上苦苦挣扎?

【问题讨论】:

  • Oracle MAF 尚未通过 Android 6/API 级别 23 的认证,Android 5/API 21 是当前的认证级别 - oracle.com/technetwork/developer-tools/maf/documentation/…。让我问问 MAF 产品管理团队何时支持 Android 6,以及何时支持运行时权限。
  • 抱歉,稍作修正。我们在运行时支持 Android 6,但在构建时支持 Android 5。不过,我仍然需要检查我们如何涵盖新的 Android 6 运行时权限。
  • 太棒了,感谢您的回复!我急切地等待更多信息。
  • 一夜之间收到了 MAF PM 团队的回复:即将发布的 MAF 版本(很可能是 MCS v2.4)将支持 API 23。由于作为 Oracle 员工的 Oracle 政策,我不能公开承诺此版本的 eta,但可以说大约在年底。如果您想了解更多详细信息,我的建议是向 Oracle 支持提出查询。
  • 进一步回复:“正如您提到的,Android 6 设备支持 MAF 应用程序,并且认证矩阵中列出了许多 Android 6 设备。安装在这些设备上时,应用程序的行为将是与 Android 5 上的应用程序相同,在这种特殊情况下,用户不会看到动态权限,而是会看到从 GooglePlay 商店下载应用程序时列出的应用程序使用的权限。”

标签: java android-6.0-marshmallow android-permissions oracle-maf


【解决方案1】:

更新(22/08.2016):

这实际上是因为我在构建配置中将目标 SDK 设置为 23。下载新的 Eclipse 只需将其重置为默认值 (21)

旧答案:

我通过下载 OEPE for Neon 解决了这个问题(我使用的是 OEPE for Mars)。

Oracle Enterprise Pack for Eclipse

应用程序现在可以正确生成一个请求使用相机权限的弹出窗口。

请注意,这导致位置服务出现问题,并且在请求 gps 位置时应用程序崩溃,我尚未发现修复或问题根源。

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2016-01-03
    • 2016-10-23
    相关资源
    最近更新 更多