Adobe AIR CameraRoll 无法在 Android 6.0 上 select 照片

Adobe AIR CameraRoll can't select photo on Android 6.0

我在上传带有媒体承诺的图片时遇到了一些问题 here

问题是在将 phone 更新为新的 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"/>

知道如何解决这个问题吗?

编辑:

我也试过这样加载 promise,但得到的结果完全一样:

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

在 Android 6.0 (v23) 中,他们引入了运行时权限,您必须向用户请求许可才能访问某些 "dangerous" 权限。

问题在于 Adob​​e 尚未将此权限请求添加到您正在使用的媒体加载方法中。

有两种方法可以解决这个问题,正如我在评论中所建议的那样,将您的目标 sdk 设置为旧版本。这将告诉 Android 您的应用程序不支持任何 6.0+ 功能,应该依赖旧的权限模型。

另一种是在需要时获取ANE以请求所需的权限。例如,您可以使用我们的权限 ANE:

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

如果您需要在您的应用中使用任何 Android 6.0 功能,请使用该方法。