2016-01-21 2 views
0

Я пытаюсь создать родное расширение, которое может получать широковещательные передачи, отправленные с родного андроида в качестве целевых трансляций.
Отправляющая часть работает, я протестировал ее с помощью собственного приложения, имеющего широковещательный приемник, но я не могу заставить его работать в родном расширении.Adobe Air ANE для андроида с внутренним расширением java, пытающимся получить широковещательную рассылку

Вот что я до сих пор:
Здесь ява сторона АНХ

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

А вот библиотека флэш сторона 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)); 
      } 
     } 
    } 
} 

А вот мой тестовый класс мобильного проекта для тестирования АНХА

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

    } 
} 

Я подписал АНХ соответственно, я также подписал приложение теста это самостоятельно. У меня есть Log.d в java-части ANE, которая должна появиться на лог-cat, но это не так, также текстовое поле просто становится пустым, как только я инициализировал RFIDController, даже без добавления прослушивателя событий.

Если вам нужен еще какой-либо код или информация, чтобы помочь мне решить эту проблему, не стесняйтесь спрашивать.
Я мог бы использовать некоторую помощь, потому что я полностью потерял, я следил за несколькими учебниками и руководством по тому, как это сделать, я должен был все сделать правильно, но я, очевидно, этого не делал.

UPDATE: 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>

UPDATE 2:

Я установил его, это был вопрос контекста вместе с этой вспышкой как-то очистить мое пользовательское событие так Я использовал событие состояния для разбора со стороны вспышки ANE в само приложение.

+0

Может быть проблема с упаковкой, каково ваше расширение.xml? – Michael

+0

@ Майкл I разместил обновление, чтобы вы могли просмотреть мое 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

Я полностью переписал расширение получателя, контекст расширения и добавил некоторые функциональные функции, чтобы получатель правильно инициализировался. Спасибо за помощь в любом случае. –

Смежные вопросы