Я пытаюсь создать родное расширение, которое может получать широковещательные передачи, отправленные с родного андроида в качестве целевых трансляций.
Отправляющая часть работает, я протестировал ее с помощью собственного приложения, имеющего широковещательный приемник, но я не могу заставить его работать в родном расширении.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 в само приложение.
Может быть проблема с упаковкой, каково ваше расширение.xml? – Michael
@ Майкл I разместил обновление, чтобы вы могли просмотреть мое exntension xml –