2016-06-08 102 views
2

我在使用媒體承諾上傳圖片時遇到了一些問題,如here所述。Adob​​e AIR CameraRoll無法在Android 6.0上選擇照片

問題是在將手機更新爲新的Android 6.0之後Async圖片再也沒有載入,在下面的代碼中,監聽器被添加到eventSource,但是onMediaLoaded從不會被觸發。更新一切都工作之前:

private function imageSelected(event:MediaEvent):void { 

    trace("Media selected..."); 
    var imagePromise:MediaPromise = event.data; 
    dataSource = imagePromise.open(); 

    if(imagePromise.isAsync) 
    { 

     trace("Asynchronous media promise."); 

     var eventSource:IEventDispatcher = dataSource as IEventDispatcher; 
     eventSource.addEventListener(Event.COMPLETE, onMediaLoaded); 

    } 
    else 
    { 
     trace("Synchronous media promise."); 
     readMediaData(); 
    } 


} 

在其他的權限,我有這方面的描述:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

任何想法如何解決這一問題?

編輯:

我也嘗試加載這樣的承諾,但得到了完全相同的結果:

var loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMediaLoaded); 
loader.contentLoaderInfo.addEventListener(ErrorEvent.ERROR, onError); 
loader.loadFilePromise(imagePromise); 
+1

你使用的是什麼目標sdk?很可能這與23中添加的運行時權限有關(即6.0)您可以通過指定舊的目標sdk來解決它。 – Michael

+0

謝謝Michael!這是解決方案。將目標sdk更改爲22後,它再次完美工作:) – deloki

+0

太棒了!我會用另一種方法來回答問題以解決問題。乾杯 – Michael

回答

1

在安卓6.0(V23),他們介紹,你必須詢問用戶運行權限允許訪問某些「危險」權限。

問題在於Adobe未將此權限請求添加到您正在使用的媒體加載方法中。

有兩種方法可以解決這個問題,正如我在評論中所建議的那樣,將您的目標sdk設置爲舊版本。這將告訴Android,您的應用程序不支持任何6.0+功能,並且應該依賴較早的權限模型。

另一種方法是抓住ANE在需要時請求所需的權限。例如,你可以從我們使用權限ANE:

http://airnativeextensions.com/extension/com.distriqt.Permissions

如果您需要任何的Android 6.0功能在你的應用程序中使用使用該方法。