为啥我的代码在 android(as3) 中对 CameraRoll 不起作用

Posted

技术标签:

【中文标题】为啥我的代码在 android(as3) 中对 CameraRoll 不起作用【英文标题】:why my code is not working about CameraRoll in android(as3)为什么我的代码在 android(as3) 中对 CameraRoll 不起作用 【发布时间】:2015-03-15 07:44:02 【问题描述】:
import flash.media.CameraRoll;
import flash.display.Loader;
import flash.media.MediaPromise;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.MediaEvent;
import flash.events.Event;

backbtn6.addEventListener(MouseEvent.CLICK, back);

var cameraroll:CameraRoll;
var loader:Loader;
var promise:MediaPromise;
var bitmap:Bitmap;
var bitmapdata:BitmapData;

openpic.addEventListener(MouseEvent.CLICK, selectpic);
function selectpic(e:MouseEvent):void

if(CameraRoll.supportsBrowseForImage)

    cameraroll = new CameraRoll();
    cameraroll.addEventListener(MediaEvent.SELECT, loadpic);
    cameraroll.browseForImage();




function loadpic(e:MediaEvent):void

promise = e.data as MediaPromise;
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, showpic);
loader.loadFilePromise(promise);


function showpic(e:Event):void

if(bitmap != null)

    removeChild(bitmap);


var originalWidth:int = Bitmap(e.currentTarget.content).width;
var originalHeight:int = Bitmap(e.currentTarget.content).height;

bitmapdata = new BitmapData(originalWidth,originalHeight);
bitmap = new Bitmap(bitmapdata);
bitmap.bitmapData = Bitmap(e.currentTarget.content).bitmapData;

bitmap.x = 0;
bitmap.y = 0;

addChild(bitmap);

这是我使用 AIR 为 android 编写的 as3 代码。 我看到其他人的代码写下了这段代码。 但它不适用于我的安卓手机。 我的代码有什么问题...帮帮我.. 我该怎么办??

如果您有任何解决方案,我很高兴开发。 我刚学了一个月as3

【问题讨论】:

你有错误信息吗? “它不起作用”不足以描述问题。详细说明它应该做什么以及它实际上在做什么。 我看到我的示例 apk 打开了相机胶卷。但是当我选择一张图片时,它没有显示在我的屏幕上。 【参考方案1】:

由于您的问题中提到的一些细节,我认为这是权限问题,代码很好。尝试添加此权限:

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

您可以将其直接添加到您的your_app-app.xml,其中your_app 是您的应用程序(项目)的名称,在&lt;/application&gt; 之前,如下所示:

<application xmlns="http://ns.adobe.com/air/application/15.0">

    <!-- ... -->

    <android>
        <manifestAdditions>
            <![CDATA[<manifest>
                <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
            </manifest>]]>
        </manifestAdditions>
    </android>
</application>

当然,不要碰 XML 的其他内容,您只需添加(或编辑,如果已经存在)部分&lt;android&gt;...&lt;/android&gt;

或者简单地使用 AIR xxx for Android Settings 对话框,其中xxx 是 AIR 的版本,可从 文件 菜单访问,然后转到 权限 选项卡并像这样选择WRITE_EXTERNAL_STORAGE 权限(当然这是针对 Flash 的):

如果您仍然一无所获,请尝试将 ErrorEvent 事件侦听器添加到您的 CameraRoll 对象以捕获错误:

cameraroll.addEventListener(
    ErrorEvent.ERROR, 
    function(e:ErrorEvent):void  
        log.text = e.text;
    
)

希望能有所帮助。

【讨论】:

以上是关于为啥我的代码在 android(as3) 中对 CameraRoll 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

AS3:为啥“this”在函数内部会改变它所指的内容?

为啥我不能在 C++0x 中对 std::shared_ptr 的向量执行 std::copy?

AS3:如何激活android air app?

在AS3中对多维数组排序(数字)

ActionScript 3 在AS3中对多维数组进行排序(数字)

AS3 中有啥奇怪的语法。为啥这会使我的浏览器挂起//静默崩溃