繁体   English   中英

Oracle MAF和Android 6.0(API级别23)中的请求权限

[英]Oracle MAF and requesting permissions in Android 6.0 (API level 23)

我有一个使用设备相机拍照的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)运行时权限请求?

编辑:因此,根据评论中的讨论,我们可以看到该应用程序在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? 为什么要在位置更新中苦苦挣扎?

更新(22 / 08.2016):

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

旧答案:

我通过下载适用于Neon的OEPE解决了这一问题(我在火星上使用OEPE)。

适用于Eclipse的Oracle Enterprise Pack

该应用程序现在可以正确生成一个弹出窗口,请求允许使用相机。

请注意,这已导致位置服务出现问题,请求gps位置时应用程序崩溃,我尚未发现解决方法或问题根源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM