我有一个带有ANE的flex移动应用程序。这个ANE有一个广播接收器,当它收到一个事件时启动flex移动应用程序:
public class BroadcastEventHandler extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.d(Constants.TAG, "BROADCAST EVENT RECEIVED!");
try {
Intent i = new Intent(context,
Class.forName(context.getPackageName()+".AppEntry"));
i.addCategory( Intent.CATEGORY_LAUNCHER );
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("nameKey", "value");
context.startActivity(i);
} catch (ClassNotFoundException e) {
e.printStackTrace();
Log.d(Constants.TAG, "Error on starting Intent: "+e.getMessage());
}
}
在flex应用程序中,我有以下代码:
protected function view1_preinitializeHandler(event:FlexEvent):void
{
NativeApplication.nativeApplication.addEventListener(
InvokeEvent.INVOKE, onInvoke);
}
private function onInvoke(event:InvokeEvent):void
{
trace("Arguments: " + event.arguments);
}
我想要做的是在执行时将Extras从broadcastreceiver传递给flex应用程序(如你所见,我在ANE代码中添加了一个Bundle对象,但我在flex应用程序中没有收到任何内容) :
跟踪:
Arguments:
您是否知道使用某些参数/附加功能启动活动(在Android原生中)并在Flex应用程序中获取它们的方法?
答案 0 :(得分:1)
最后,我无法通过本机代码中的Bundle对象执行此操作。将参数传递给应用程序必须使用清单中的<data android:scheme="my-scheme"/>
标记。
但是,
有一点需要注意,使用AIR应用程序中的自定义URL方案调用其他应用程序是不可能的。 AIR安全模型限制性更强,它将方案限制为:http:,https:,sms:,tel:,mailto:,file:,app:,app-storage:,vipaccess:和connectpro:。你可以在这里和这里找到更多相关信息。
从这个伟大的教程:
http://www.riaspace.com/2011/08/defining-custom-url-schemes-for-your-air-mobile-applications/
到目前为止,我所做的是实现一个包含成员数据的类。在那里,我存储了我想要稍后处理的数据(这是我想通过Bundle直接传递的数据)。
public class DataModel {
//data I will get after in the actionscript side of the code
private int notificationCode;
public int getNotificationCode(){
return notificationCode;
}
public void setNotificationCode(int notificationCode){
this.notificationCode=notificationCode;
}
}
当我在broadcastreceiver中收到通知时,我设置了notificationCode的新值,然后我启动了活动(与之前相同但添加了对setNotificationCode函数的调用)。
然后,在actionscript方面,在onInvoke方法上,我进行以下调用:
//call native functions:
//broadcastevent is the EventDispatcher that connects to the ANE
notificationCode=broadcastevent.getCode();
switch(notificationCode)
{
case Constants.DEFAULT_NOTIFICATION_CODE:
{
notificationMessage="THERE ARE NO NOTIFICATIONS";
break;
}
case Constants.UPDATE_APP_CODE:
{
notificationMessage="UPDATE APP NOTIFICATION";
break;
}
case Constants.SHOW_ALERT_CODE:
{
notificationMessage="SHOW ALERT NOTIFICATION";
break;
}
default:
break;
这不是我一直在寻找的东西,但我还没有找到其他方法来做类似的事情,而且它有效!