在工作中遇到这么一个问题,要在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());
}
浙公网安备 33010602011771号