2016-01-21 20 views
0

我想創建一個本機擴展,它可以接收廣播,從原生android發送作爲intent廣播。
發送部分的工作原理,我用一個具有廣播接收器的本地應用程序測試過,但我不能讓它在本地擴展中工作。Adob​​e空氣ANE與Java原生擴展嘗試接收廣播的Android

這是我到目前爲止有:
這裏ANE

public class ReceiverPhidget extends BroadcastReceiver { 

    private FREContext mFREContext; 

    public ReceiverPhidget(FREContext mFREContext) { 
     this.mFREContext = mFREContext; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action.equals(IntentsKeys.INTENT_PHIDGET_CONNECTED)){ 
      //Send listener in ANE project with message that phidget connected (not must) 
      System.out.println("Phidget connected"); 
      mFREContext.dispatchStatusEventAsync("Yes", Keys.KEY_CONNECTED); 
     } else 

     if (action.equals(IntentsKeys.INTENT_PHIDGET_DISCONNECTED)){ 
      //Send listener in ANE project with message that phidget disconnected (not must) 
      System.out.println("Phidget disconnected"); 
      mFREContext.dispatchStatusEventAsync("Yes", Keys.KEY_DISCONNECTED); 
     } else 

     if (action.equals(IntentsKeys.INTENT_PHIDGET_GAIN_TAG)){ 
      //Send listener with data in ANE project with message that phidget gain receive 
      String message = intent.getStringExtra(IntentsKeys.INTENT_PHIDGET_EXTRA_DATA); 
      System.out.println("Phidget gain message: " + message); 
      Log.d("TAG FOUND", message); 
      mFREContext.dispatchStatusEventAsync(message, Keys.KEY_TAG_GAIN); 
     } 
    } 

    public static IntentFilter getIntentFilter(){ 
     final IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(IntentsKeys.INTENT_PHIDGET_CONNECTED); 
     intentFilter.addAction(IntentsKeys.INTENT_PHIDGET_DISCONNECTED); 
     intentFilter.addAction(IntentsKeys.INTENT_PHIDGET_GAIN_TAG); 
     return intentFilter; 
    } 

} 

而且FREExtension

public class ReceiverExtension implements FREExtension { 

    private ReceiverPhidget mReceiverPhidget; 
    private ReceiverExtensionContext mContext; 

    @Override 
    public void initialize() { 
     mReceiverPhidget = new ReceiverPhidget(mContext); 
     mContext.getActivity().registerReceiver(mReceiverPhidget, ReceiverPhidget.getIntentFilter()); 
    } 

    @Override 
    public FREContext createContext(String s) { 
     return mContext = new ReceiverExtensionContext(); 
    } 

    @Override 
    public void dispose() { 
     mContext.getActivity().unregisterReceiver(mReceiverPhidget); 
    } 
} 

的Java端與這裏的Flash庫側ANE

package nl.mediaheads.anetest.extension { 
    import flash.events.EventDispatcher; 
    import flash.events.StatusEvent; 
    import flash.external.ExtensionContext; 

    public class RFIDController extends EventDispatcher { 

     private var extContext:ExtensionContext; 
     private var channel:int; 
     private var scannedChannelList:Vector.<int>; 

     public function RFIDController() { 
      extContext = ExtensionContext.createExtensionContext(
       "nl.mediaheads.anetest.exntension.RFIDController", ""); 

      extContext.addEventListener(StatusEvent.STATUS, onStatus); 
     } 

     private function onStatus(event:StatusEvent):void { 
      if (event.level == EventKeys.KEY_TAG_GAIN) { 

       dispatchEvent (new TagEvent(TagEvent.TAG_GAINED, event.code)); 
      } 
     } 
    } 
} 

這裏是我的測試手機項目類來測試ANE

package 
{ 
    import flash.display.Sprite; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.text.TextField; 
    import nl.mediaheads.anetest.extension.RFIDController; 

    [SWF(width="1280", height="800", frameRate="60", backgroundColor="#ffffff")] 
    public class AneTestApp extends Sprite 
    { 

     private var tf:TextField; 
     private var rc:RFIDController; 

     public function AneTestApp() 
     { 
      super(); 

      // support autoOrients 
      stage.align = StageAlign.TOP_LEFT; 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      stage.color = 0xFFFFFF; 

      addEventListener(Event.ADDED_TO_STAGE, onAdded); 
     } 

     private function onAdded(event:Event):void { 


      // 
      tf = new TextField(); 
      tf.width = 200; 
      tf.height = 50; 
      tf.x = 10; 
      tf.y = 64; 
      tf.mouseEnabled = false; 
      tf.background = true; 
      tf.backgroundColor = 0xF50000; 
      addChild(tf); 

      rc = new RFIDController(); 

      tf.text = "test 1"; 
      this.addEventListener(TagEvent.TAG_GAINED , onTagAdded); 
      tf.text = "test 2"; 
      // 
     } 

     private function onTagAdded(event:TagEvent):void 
     { 
      tf.text = event.params; 
     } 

    } 
} 

我已經簽署了相應的ANE,我還簽署了測試應用它的自我。 我有這應該彈出的日誌貓ANE的Java的一部分Log.d但它不會,也文本字段只是變成空白,只要我初始化RFIDController即使沒有添加的事件監聽器。

如果您需要更多的代碼或信息,以幫助我解決這個問題隨時問。
我真的可以使用一些幫助,因爲我完全失去了知識,我遵循了多個教程並指導如何做到這一點,我應該盡一切努力,但我顯然沒有做到。

更新:1 擴展XML

<extension xmlns="http://ns.adobe.com/air/extension/3.5"> <id>nl.mediaheads.anetest.exntension.RFIDController</id> <versionNumber>0.0.1</versionNumber> <platforms> <platform name="Android-ARM"> <applicationDeployment> <nativeLibrary>AneTest.jar</nativeLibrary> <initializer>nl.mediaheads.anetest.ReceiverExtension</initializer> <finalizer>nl.mediaheads.anetest.ReceiverExtension</finalizer> </applicationDeployment> </platform> </platforms> </extension>

更新2:

我固定它,這是一個方面與閃光燈一起問題不知何故清洗我的自定義事件等等我使用狀態事件從ANE的flash側解析到空中應用程序本身。

+0

可能是一個包裝問題,你的extension.xml是什麼樣的? – Michael

+0

@Michael我發佈了一個更新,所以你可以查看我的exntension xml –

回答

0

目前正在創建您的擴展,將最有可能的情況下創建之前被調用的初始化點接收器,讓你的背景可能是在這一點空,導致你的錯誤。

請嘗試移動ReceiverPhidget創建您ReceiverExtensionContext的構造。像下面這樣(我沒有測試過):

public class ReceiverExtensionContext extends FREContext 
{ 
    private ReceiverPhidget mReceiverPhidget; 

    public ReceiverExtensionContext() 
    { 
     mReceiverPhidget = new ReceiverPhidget(this); 
     getActivity().registerReceiver(mReceiverPhidget, ReceiverPhidget.getIntentFilter()); 
    } 

    @Override 
    public Map<String, FREFunction> getFunctions() 
    { 
     Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>(); 
     return functionMap; 
    } 

    @Override 
    public void dispose() 
    { 
     getActivity().unregisterReceiver(mReceiverPhidget); 
    } 

} 
+0

我完全重寫了接收器擴展,擴展上下文,並添加了一些函數功能,使接收器得到正確的初始化。 感謝您的幫助。 –