![](/img/trans.png)
[英]Oracle MAF - Requesting GPS location causes fatal OS exception in android 6.0
[英]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? 为什么要在位置更新中苦苦挣扎?
这实际上是因为我在构建配置中将目标SDK设置为23。 下载新的Eclipse只需将其重置为默认值(21)
我通过下载适用于Neon的OEPE解决了这一问题(我在火星上使用OEPE)。
适用于Eclipse的Oracle Enterprise Pack
该应用程序现在可以正确生成一个弹出窗口,请求允许使用相机。
请注意,这已导致位置服务出现问题,请求gps位置时应用程序崩溃,我尚未发现解决方法或问题根源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.