簡體   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