1

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;
                    // ...
                }
            }
4

5 に答える 5

0

バーコード画像をキャプチャし、actionscriptを使用して独自のアプリ内でデコードすることを検討する必要があります。私は自分でアプリのQRコードリーダーを使ってこれを非常に簡単に行ったので、zxingライブラリがflex/actionscriptで正常に機能することを確認できます。

これは、約1年前に私が行った概念実証のビデオです:http ://www.youtube.com/watch?v = pHWTwxnPfHw

カメラキャプチャを起動し、zxingライブラリを使用してデコードするだけです。すでに移植されており、actionscriptで利用できます。

http://code.google.com/p/zxing/ (ライブラリのダウンロードでactionscriptソースを探します)

それ以上の情報が必要な場合は、いくつかの情報源を掘り下げてみます... :)

于 2012-06-11T14:54:55.027 に答える
0

FREFunction インスタンスを使用して onActivityResult をリッスンすることはできません。あなたがする必要があるのは、新しいアクティビティを開始し、そこにその機能を実装することです:

まず、新しいアクティビティを作成する必要があります。

public class SomeActivity extends Activity 
{
    public static int UNIQUE_REQUEST_CODE   =  444444;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
        startActivityForResult( intent, UNIQUE_REQUEST_CODE );
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
         super.onActivityResult(requestCode, resultCode, data);
         if (requestCode == UNIQUE_REQUEST_CODE)
         {
             // do stuff
         }
         this.finish();
    }
}

次に、FREFunction.call 実装で、このアクティビティを開始する必要があります。

Intent startActivityIntent = new Intent(context.getActivity(), SomeActivity.class);
context.getActivity().startActivity( startActivityIntent );
于 2012-08-17T02:48:12.957 に答える
0

これで、FREObject に onActivityResult を実装できるようになりました。[Android] AIR アクティビティから onActivityResult および onStart/onPause/.... イベントを取得する [ソリューション]を確認してください。FREContext に実装する方法を示していますが、私はそれを使用して FREObject に実装しました

于 2014-04-25T03:20:24.777 に答える
0

それほど滑らかではありませんが、ネイティブ拡張ではなく、カスタム URL からバーコード アプリを起動することでこれを行いました。バーコードが適切にスキャンされると、バーコード アプリはそれをクリップボードにコピーします (これはデフォルトで行われます)。ユーザーは [戻る] を 2 回押してアプリに戻り、そこでクリップボードからテキストを読み取ることができます。

于 2012-06-10T01:54:57.413 に答える
0

Michael が言ったように、独自のアクティビティを作成し、onCreate メソッドと onActivityResult メソッドをオーバーライドする必要があります。何らかの理由で、これはまだうまくいきませんでした。数時間頭を悩ませた後、アクティビティを Android アプリケーション マニフェストに含める必要があることに気付きました。これを行うには、AIR アプリケーション記述子 xml ファイルを開き、manifestAdditions タグに以下を挿入します。

<application>
    <activity android:name="insert.ane.path.here.ZXingActivityYouCreated"></activity>
</application>
于 2012-11-06T20:43:01.407 に答える