AS3:如何拍摄JPG / PNG截图并将其保存到Android手机的SDCard目录中

时间:2017-10-29 17:56:36

标签: android actionscript-3 flash air screenshot

我制作了一个Android移动应用程序,截取屏幕截图并将其保存为JPG / PNG格式并保存到Android手机上的目录SDCard / Internal storage。

当我在桌面上尝试时,一切都没问题。我将.apk发布并安装到移动Android后,如果我点击保存按钮,我会收到这样的错误

  

“不幸的是,我的申请已停止。”

任何人都可以帮我解决这个错误吗?

这是我的代码:

import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import com.adobe.images.JPGEncoder;

btn_save.addEventListener(MouseEvent.CLICK, save_image);
function save_image(e:MouseEvent):void
{
   btn_back.visible = false;
   btn_save.visible = false;
   var qImageData:BitmapData = new BitmapData(540, 960);
   qImageData.draw(stage);
   var qEncoder:JPGEncoder = new JPGEncoder(100);
   var qBytes:ByteArray = qEncoder.encode(qImageData);
   var qfile:FileReference = new FileReference();
   var names:String = "Image_name";
   qfile.save(qBytes, names+".jpg");
   btn_back.visible = true;
   btn_save.visible = true;
}

感谢。

1 个答案:

答案 0 :(得分:0)

由于权限问题(不允许将数据写入设备)而崩溃。
研究如何通过AIR / AS3或编码工具(IDE)选项允许此类权限进行输出。

还要考虑:

  • 添加import flash.net.FileReference;
  • 确保变量在函数之外声明。
    否则var qfile:FileReference只有在触发功能时才会开始存在。对于桌面上的Flash Player来说这很好,但是在移动设备上你的应用程序必须与Android操作系统交谈,操作系统可能不喜欢某个(以前)未声明的文件系统编辑变量突然出现在函数中...

  • :FileReference在桌面上显示“另存为”对话框,该如何在移动设备上运行?也许你应该(按预期)使用AIR的FileSystem API来制作:File类型,以便在点击“保存”按钮时自动保存到SD卡?

  • 请查看这些search results,了解其他人如何做到这一点。

(更新后的代码):未经测试,但首先尝试设置如下代码...
如果不起作用然后研究权限问题,请尝试File而不是{ {1}})

FileReference

另请确保Android manifest allows //## 1) add imports import flash.events.MouseEvent; import flash.display.MovieClip; import flash.display.DisplayObject; import com.adobe.images.JPGEncoder; import flash.net.FileReference; //add this //## 2) declare variables var names:String = "Image_name"; var qImageData:BitmapData; var qEncoder:JPGEncoder; var qBytes:ByteArray; //var qfile:FileReference = new FileReference(); var qFile:File = File.userDirectory.resolvePath(names+".jpg"); var qFStream:FileStream = new FileStream(); //## 3) add any required listeners btn_save.addEventListener(MouseEvent.CLICK, save_image); //## 4) declare all functions here onwards function save_image(e:MouseEvent):void { btn_back.alpha = 0.4; //btn_back.visible = false; btn_save.alpha = 0.4; //btn_save.visible = false; qImageData = new BitmapData(540, 960); qImageData.draw(stage); qEncoder = new JPGEncoder(100); qBytes = qEncoder.encode(qImageData); //var qfile:FileReference = new FileReference(); //var names:String = "Image_name"; //qfile.save(qBytes, names+".jpg"); qBytes.position = 0; qFStream.open(qFile, FileMode.WRITE); qFStream.writeBytes(qBytes, 0, qBytes.length); qFStream.close(); btn_back.alpha = 0.4; //btn_back.visible = true; btn_save.alpha = 0.4; //btn_save.visible = true; //## Check if file (qFile) was created successfully (it exists on SD card) if (qFile.exists) { //# Do something if "The File Exists" on the SD card... } else { //# Here will handle case of "No File Created"... } } 权限。

WRITE

它将是一个名为<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> app.xml的文件。确保它是这样的:

YourFileName-app.xml