I'm trying to save my bitmapdata as png to local folder on Android, and I can't get it to work. I do get the window with folder selection and ability to give permision, but as soon as I do that, I get another selection, but this time for a file. If I select any file or go back to the app I get 'save failed' message. Any ideas?
private function saveHandler(e: MouseEvent): void {
// get drawing as bitmapdata from the canvas instance.
var canvasBmp:BitmapData = canvas.drawing();
// create new png encoder object and convert bitmapdata to png
pngStream = PNGEncoder.encode(canvasBmp);
// dispose of the bitmapdata object when finished.
canvasBmp.dispose();
// Use intent-based mechanism to select a directory to save the file
selectedDirectory = new File();
selectedDirectory.addEventListener(Event.SELECT, onSaveDirectorySelected);
selectedDirectory.browseForDirectory("Select Directory to Save");
}
private function onSaveDirectorySelected(event:Event):void {
selectedDirectory.removeEventListener(Event.SELECT, onSaveDirectorySelected);
// Get selected directory and request write permission
selectedDir = event.target as File;
selectedDir.addEventListener(PermissionEvent.PERMISSION_STATUS, onPermissionStatus);
selectedDir.requestPermission();
// Construct file name with timestamp
var currentDate:Date = new Date();
var dateString:String = currentDate.fullYear + "_" + (currentDate.month + 1) + "_" + currentDate.date;
var timeString:String = currentDate.hours + "" + currentDate.minutes + "" + currentDate.seconds;
fileName = "my image " + dateString + " " + timeString + ".png";
}
private function onPermissionStatus(e: PermissionEvent): void {
if (e.status == PermissionStatus.GRANTED) {
var file:File = selectedDir.resolvePath(fileName);
var stream:FileStream = new FileStream();
stream.open(file, FileMode.WRITE);
stream.writeBytes(pngStream);
stream.close();`
// Remove text from log.text after 3s.
log.text = "Image saved";
timer = new Timer(3000, 1);
timer.addEventListener(TimerEvent.TIMER, removeText);
timer.start();
} else {
log.text = "Save failed";
// Remove text from log.text after 3s.
timer = new Timer(3000, 1);
timer.addEventListener(TimerEvent.TIMER, removeText);
timer.start();
}
}