2012-06-09 79 views
1

我創建了一個本機擴展,以便在Android上使用zxing應用程序(通過intent)。Android onActivityResult的Adobe Native Extension

該應用程序啓動罰款和掃描條形碼。

我只是無法將結果返回到我的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; 
        // ... 
       } 
      } 

回答

0

它不是光滑的,但我通過從自定義url啓動條形碼應用程序來完成此操作,而不是本機擴展。條形碼掃描正確後,條形碼應用程序將其複製到剪貼板(默認情況下爲此)。用戶按兩次返回到應用程序,然後我們可以從剪貼板中讀取文本。

0

您應該考慮只是捕獲條形碼圖像,並使用actionscript將它解碼到您自己的應用程序中。我自己用自己的QR代碼閱讀器自己完成了這個任務,所以我可以很容易地確認zxing庫在flex/actionscript中工作得很好。

這裏有一個視頻我在一年前做了概念,它的證明一下:http://www.youtube.com/watch?v=pHWTwxnPfHw

您只需火的相機捕獲,然後使用斑馬線庫進行解碼。它已被移植並可用於動作。

http://code.google.com/p/zxing/(找庫下載ActionScript源)

如果你需要比我會嘗試發掘一些來源爲您提供更多信息... :)

0

你可以用」使用FREFunction實例來監聽onActivityResult。你需要做的是開始一個新的活動和執行功能有:

所以,首先你需要創建一個新的活動:在您的FREFunction.call實現

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(); 
    } 
} 

然後,你需要開始這項活動。

Intent startActivityIntent = new Intent(context.getActivity(), SomeActivity.class); 
context.getActivity().startActivity(startActivityIntent); 
0

就像Michael說的那樣,您需要創建自己的活動並重寫onCreate和onActivityResult方法。出於某種原因,這仍然不適合我。幾個小時後,我意識到活動需要在您的Android應用程序清單中。您可以通過打開AIR應用程序描述符xml文件並將以下內容插入到manifestAdditions標記中來完成此操作。

<application> 
    <activity android:name="insert.ane.path.here.ZXingActivityYouCreated"></activity> 
</application>