【Flex+iOS】iOS端ANE的使用(一)

最近在实现一个微课项目的iOS端ANE的调用,由于这个技术断层好久了,所以着实研究了一段时间,今天大功告成,遂共享之。

首先,针对网上许久没有更新的相关资料,我先说下我的编译环境:Flash builder 4.7(这个真没招);Apache Flex 4.14.0(3月份新鲜出炉);Xcode6.2+iOS8.2(时间截止到2015年3月31日,全是最新的版本)。

东西准备完了,开始进入正题吧。

首先先说明一下我的需求:Flex端编写了微课的客户端,对于iOS原生的需求,需要根据Flex端传入的视频路径,调用iOS原生的播放器进行视频的播放,同时,如果用户视频库(也就是系统视频库)中有视频,要调用iOS上的图库(iOS上用摄像头拍摄的MOV视频文件都在这里面)浏览器,浏览视频,并在选取视频后,返回给Flex端选取的视频的路径。

需求虽然很简单,但是基本上要用到的ANE上的难点都基本上涉及到了,例如打包ANE的时候拓展功能库、Flex层与iOS层的事件以及参数传递、调用原生view以及viewcontroller之后,移除组件出现的各种问题等。

直接进入正题吧。

首先,我们要先针对我们的需求,编写一个SWC库文件,为什么要编写这个呢?打个比方来说,这个SWC文件就相当于一个桥梁,用来连接Flex程序与iOS,让它们形成一个整体。

(一)打开Flash builder,文件——新建——Flex 库项目,这里有要注意的地方:在新建立的过程中,一定要把“包括Adobe AIR库”这个选项选中,不然在后面的代码过程中,会找不到一些关键的库文件。

(二)建立完SWC库项目,接着在src文件夹下建立AS类,并根据需求进行代码编写。

 1 package com.Dsideal.MicroANEforiOS
 2 {
 3     import com.Dsideal.Event.ANELibUtilsEvent;
 4     
 5     import flash.events.EventDispatcher;
 6     import flash.events.StatusEvent;
 7     import flash.external.ExtensionContext;
 8 
 9     /**
10      * 【功能】:微课项目iOS端的ANE外壳。
11      * @author zhanghc 2015-03-23
12      */
13     public class ANELibUtils extends EventDispatcher
14     {
15         //唯一实例
16         public var m_extContext:ExtensionContext = null;
17         
18         /**
19          * 【功能】:微课ANEforiOS
20          * @author zhanghc 2015-03-23
21          */
22         public function ANELibUtils()
23         {
24             super();
25             initExtension();
26         }
27         
28         /**
29          * 【功能】:实例化组件
30          * @author zhanghc 2015-03-23
31          */
32         private function initExtension():void
33         {
34             // TODO Auto Generated method stub
35             m_extContext = ExtensionContext.createExtensionContext("com.Dsideal.iosANE.DsMicroClassANE", null);//ID必须要与OBC端的ID一致
36             m_extContext.addEventListener(StatusEvent.STATUS, onFinishOpenVideo);
37         }
38         
39         /**
40          * 【功能】:添加事件传递的连接
41          * @author zhanghc 2015-03-31
42          */
43         protected function onFinishOpenVideo(event:StatusEvent):void
44         {
45             // TODO Auto-generated method stub
46             dispatchEvent(new ANELibUtilsEvent(event.code, event.level));
47         }
48         
49         /**
50          * 【功能】:调用系统播放器,播放视频
51          * @param path 传入的视频路径
52          * @author zhanghc 2015-03-23
53          */
54         public function PlayVideo(path:String):void
55         {
56             m_extContext.call("PlayVideo", path);//将视频路径传入ios本机视频进行播放
57         }
58         
59         /**
60          * 【功能】:打开系统视频库
61          * @author zhanghc 2015-03-30
62          */
63         public function OpenVideoGel():void
64         {
65             m_extContext.call("OpenVideoGel");
66         }
67     }
68 }

这是最简单的框架了,首先声明一个ExtensionContext类型的变量m_extContext,然后在构建的时候为给定的扩展标识符和上下文类型创建 ExtensionContext 实例,其中需要注意的是"com.Dsideal.iosANE.DsMicroClassANE"这个ID是要与之后我们在Xcode中用Object-c建立项目的之后命名的包名ID要保持完全的一致。

至于m_extContext.addEventListener(StatusEvent.STATUS, onFinishOpenVideo);这行代码,是关于iOS层与Flex层之间事件传递的代码,现在不用管,以后会介绍,因为这个得细说。

至于PlayVideo(path:String)与OpenVideoGel()这两个函数,看注释就明白了,这两个是Flex调用ANE的入口,ANE在使用的过程中,就像一个库文件似得,实例化ANE,然后调用实例的函数就可以了,为了让大家更直观,先把成品ANE的使用代码展示一部分,好理解入口这个概念。

var _ane:ANELibUtils = new ANELibUtils();
_ane.OpenVideoGel();

肿么样?很简单吧~写完代码后,清理下项目,在项目的bin文件夹下面就有我们编译好的SWC库文件了,保存好这个文件,后面会用到。

 

转载于:https://www.cnblogs.com/zhanghongchen/articles/4381341.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值