将额外内容从ANE传递到Flex应用程序

时间:2014-02-14 12:29:06

标签: android actionscript-3 flex air flex-mobile

我有一个带有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应用程序中获取它们的方法?

1 个答案:

答案 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;

这不是我一直在寻找的东西,但我还没有找到其他方法来做类似的事情,而且它有效!