我想創建一個本機擴展,它可以接收廣播,從原生android發送作爲intent廣播。
發送部分的工作原理,我用一個具有廣播接收器的本地應用程序測試過,但我不能讓它在本地擴展中工作。Adobe空氣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側解析到空中應用程序本身。
可能是一個包裝問題,你的extension.xml是什麼樣的? – Michael
@Michael我發佈了一個更新,所以你可以查看我的exntension xml –