With AIR 24 the way of handling permissions has changed, so i need to update an util class using FileReference, CameraRoll and CameraUI to deal with user actions
but i got a problem with the CameraUI part, the code works on AIR 23, but if i add the permission pipeline to update it for AIR 24, i got an error so far, i'm stuck to grab the bitmapData
Test Code
package
{
import flash.media.*;
import flash.events.*;
import flash.display.*;
import flash.permissions.PermissionStatus;
public class Permission_Camera_UI extends Sprite
{
private var camera : CameraUI,
loader : Loader;
public function Permission_Camera_UI () { addEventListener (Event.ADDED_TO_STAGE, init); }
private function init (e : Event) : void { removeEventListener (Event.ADDED_TO_STAGE, init);
with (stage) { align = 'TL'; scaleMode = 'noScale'; }
loader = new Loader ();
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, setup);
if (CameraUI.isSupported)
{
camera = new CameraUI();
// version >= 24
trace ('Permission Status : ' + CameraUI.permissionStatus);
if (CameraUI.permissionStatus != PermissionStatus.GRANTED)
{
camera.addEventListener (PermissionEvent.PERMISSION_STATUS, function (e : PermissionEvent) : void
{
if (e.status == PermissionStatus.GRANTED)
{
trace ('Connect Camera (New permission)');
launch ();
}
else { trace ('Permission Denied'); }
});
try
{
trace ('Permission Request');
camera.requestPermission ();
}
catch (e : Error)
{
trace ('Permission Pending');
}
}
else
{
trace ('Connection Camera (Still had permission)');
launch ();
}
// version >= 23
// launch ();
}
}
private function launch () : void
{
camera.addEventListener (ErrorEvent.ERROR, function (e : Event) : void { trace ('Camera Error'); });
camera.addEventListener (Event.CANCEL, function (e : Event) : void { trace ('Camera Cancel'); });
camera.addEventListener (MediaEvent.COMPLETE, promise);
camera.launch (MediaType.IMAGE);
}
private function promise (e : MediaEvent) : void
{
trace ('Image captured' );
loader.loadFilePromise (e.data);
}
private function setup (e : Event) : void
{
trace ('Image available');
var b : BitmapData = Bitmap (loader.content).bitmapData;
addChild (new Bitmap (b));
}
}
}
Traces
AIR 24 + permission
Permission Status : unknown
Permission Request
Connect Camera (New permission)
Image captured
Error #2044 text=Error #2124
AIR 23
Image captured
Image available
both have
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>