1

我创建了一个 Native Extension 以在 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

您不能使用 FREFunction 实例来监听 onActivityResult。您需要做的是启动一个新的 Activity 并在那里实现该功能:

所以首先你需要创建一个新的活动:

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

正如迈克尔所说,您需要创建自己的活动并覆盖 onCreate 和 onActivityResult 方法。出于某种原因,这仍然对我不起作用。经过几个小时的努力,我意识到活动需要在您的 Android 应用程序清单中。您可以通过打开 AIR 应用程序描述符 xml 文件并将以下内容插入 manifestAdditions 标记来执行此操作。

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

现在您可以为 FREObject 实现 onActivityResult,请在此处查看[Android] Getting onActivityResult and onStart/onPause/.... events from AIR activity [solution]。它展示了如何在 FREContext 上实现它,但我已经用它在 FREObject 上实现了

于 2014-04-25T03:20:24.777 回答
0

它没有那么光滑,但我通过从自定义 url 启动条形码应用程序来完成此操作,而不是本机扩展。正确扫描条形码后,条形码应用程序会将其复制到剪贴板(默认情况下会这样做)。用户按两次返回到应用程序,然后我们可以从剪贴板读取文本。

于 2012-06-10T01:54:57.413 回答
0

您应该考虑只捕获条形码图像并使用 actionscript 在您自己的应用程序中对其进行解码。我自己很容易在应用程序中使用 QR 码阅读器完成了这项工作,因此我可以确认 zxing 库在 flex/actionscript 中工作得很好。

这是我大约一年前为它制作的概念验证视频:http ://www.youtube.com/watch?v=pHWTwxnPfHw

您只需触发相机捕获,然后使用 zxing 库对其进行解码。它已经被移植并在 actionscript 中可用。

http://code.google.com/p/zxing/ (在库下载中查找actionscript源)

如果您需要更多信息,我会尝试为您挖掘一些资源...... :)

于 2012-06-11T14:54:55.027 回答