![](/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.