Adobe AIR CameraRoll无法在Android 6.0上选择照片

时间:2016-06-08 22:30:38

标签: android actionscript-3 air starling-framework

我在上传带有媒体承诺的图片方面存在一些问题,如here所述。

问题是,在将手机更新到新的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 个答案:

答案 0 :(得分:1)

在Android 6.0(v23)中,他们引入了运行时权限,您必须要求用户获得访问某些“危险”权限的权限。

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

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

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

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

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