Android で (インテント経由で) zxing アプリを使用するためのネイティブ拡張機能を作成しました。
アプリは正常に起動し、バーコードをスキャンします。
結果を Flex プロジェクトに戻すことができません。onActivityResult メソッドがネイティブ拡張によって呼び出されることはないようです。
おそらく助けてもらえますか?
以下はコードです:
public class BarcodeScanFunction implements FREFunction {
public static BarcodeExtensionContext _context;
@Override
public FREObject call(FREContext context, FREObject[] passedArgs) {
_context = (BarcodeExtensionContext)context;
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
context.getActivity().startActivityForResult(intent, 0);
return null;
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult ir = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
_context.dispatchStatusEventAsync("DATA_CHANGED", ir.getContents());
}
}
Actionscript ハンドラー:
public class NativeBarcode extends EventDispatcher
{
private static var extContext:ExtensionContext = null;
public function NativeBarcode(target:IEventDispatcher=null)
{
super(target);
if ( !extContext )
{
extContext = ExtensionContext.createExtensionContext("za.co.flatrocksolutions.Barcode","barcode");
extContext.call("initMe");
}
}
public static function get isSupported():Boolean
{
var toReturn:Boolean = false;
toReturn = extContext.call("isSupported") as Boolean;
return toReturn;
}
public function scan():void
{
extContext.addEventListener(StatusEvent.STATUS, onStatus);
extContext.call("scanMe");
}
public function onStatus(event:StatusEvent):void {
//dispatchEvent(event);
var e : StatusEvent = new StatusEvent("DATA_CHANGED", true, false, event.code, event.level);
dispatchEvent(e);
}
}
ANE の使用:
be = new NativeBarcode();
be.addEventListener("DATA_CHANGED", onStatus);
be.scan();
....
private function onStatus(e:StatusEvent):void
{
if (e.code == "DATA_CHANGED")
{
var stringData:String = e.level;
// ...
}
}