从Java Apk中调用 Flex Air Apk 的方法

在工作中遇到这么一个问题,要在android系统中实现音视频聊天,用android SDK来做的话会很麻烦,考虑用Flex 实现音视频功能,然后主程序(java APK)调用Flex APK实现音视频聊天功能。这就牵扯到两种不同开发工具做出来的APK互相调用的问题。解决方法如下:

在Flex APK的配置文件中,<intent-filter>部分加入一个android:scheme, 比如 :<data android:scheme="FLVURI"/>

然后可以在JAVA APK中这样调用:

  

protected void call(String flvUrl)
    {
        String url = "FLVURI://?url=http://www.sina.com.cn&type=play&view=apkView";
        Uri uri = Uri.parse(url);
        Intent _intent = new Intent(Intent.ACTION_VIEW, uri);
        activity.startActivity(_intent);
    }


在 Flex APK中接收传过来的参数:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
        initialize="init();"
        removing="view1_removingHandler(event)"
        xmlns:s="library://ns.adobe.com/flex/spark"
        title="FlexAPK">
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import flash.desktop.NativeApplication;
            import flash.events.Event;
            
            import mx.utils.URLUtil;
            
            import spark.events.ViewNavigatorEvent;

            public function init():void
            {
                NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, doInvokeEvent);
            }

            public function doInvokeEvent(event:InvokeEvent):void
            {
                trace("args="+event.arguments.toString());
            }

            protected function view1_removingHandler(event:ViewNavigatorEvent):void
            {
                NativeApplication.nativeApplication.removeEventListener(InvokeEvent.INVOKE, doInvokeEvent);

            }
          ]]>
    </fx:Script>
  </s:View>
复制代码

这样就得到了所需要的参数。在FLEX APK中,可以根据接收到的参数的不同,跳转到不同的View:

 this.navigator.pushView(views.apkPlayer);

接收参数时有个问题,那就是event.arguments本来是一个array,但这个array的length总是一,传递过来的整个url都放在

event.arguments[0]中,如果需要将各个参数分拆开来,必须自己写代码实现,很是麻烦。不知道有没有其它更好的办法。
 public function doInvokeEvent(event:InvokeEvent):void
            {
                trace("args="+event.arguments.toString());
            }

你可能感兴趣的:(从Java Apk中调用 Flex Air Apk 的方法)