androidair开发
‘壹’ 如何让应用随系统启动 android
如果您是一位Java Android开发人员,那么实现一个随系统自启动的应用对您来说应该非常Easy,但对于一位使用Adobe Flash技术开发应用,然后用AIR打包机制制作.APK的开发者来说,实现这个功能却不是很轻松的。Flash的优势就是跨平台,一位Flash开发者可以使用自身积累的知识体系,以最小的学习成本进入Android开发的世界。AIR在打包的时候对我们隐藏了很多细节,这样一方面可以减少我们的学习阻力,一方面却也因为这个不透明的过程造成一些困扰(后面详述)。如果我们要实现一个功能,AIR核心API却没有提供实现,就成了非常麻烦的事情,不过现在好在AIR已经提供了一种扩展自己功能的机制,就是ANE。对于Android开发来说,我们可以使用Java代码来完成AIR本身不提供的功能。
关于ANE的基本知识,您可以参阅这里(中文)
很棒的ANE for Android实例教程http://t.cn/SbsI5j跟这个过一遍就明白ANE的原理,创建过程和使用方式了。
下面我们来看看如何让一个AIR打包的APK实现随系统自己启动的功能(当然也要借助ANE了)。
APK的AndroidManifest.xml分析
在动手之前,您最好先把AIR打包产生的APK文件做一下分析,了解它的特性,后面就可以少走一些弯路。将.apk文件直接改扩展名为.zip,解压即可看到它的结构。注意AndroidManifest.xml,这是Android应用非常核心的一个配置文件。这个文件是AIR打包自动产生的,但是和AIR应用本身的XML配置文件也是有管理的(AIR应用的XML配置中的android节点部分会被合并到AndroidManifest.xml,这样方便我们做一些权限设定等等)。
解压得到的AndroidManifest.xml是个二进制的XML文档,无法用文本工具查看,您可以先使用AXMLPrinter2.jar将它转换为普通文本格式即可阅读。
这个文件中我们要注意几个细节:
1. manifest节点的package属性不能由我们设定,这是AIR打包的时候自动设定的,规则是“air.应用ID”,比如我们的应用ID是TestAppANEs,那么这里的设置就是package=”air.TestAppANEs”
2. 在application部分会自动产生一个activity,名称是.AppEntry。activity相当于Android应用的视图,AIR会自动产生一个视图,用来承载我们的Flash内容。
了解这些细节之后,我们就可以继续实施ANE部分的开发了。
ANE实现
创建ANE项目的过程就不细述了,您可以参阅Adobe的文档。这里只说和随系统启动相关的部分。您首先要创建一个包,命名和manifest节点的package属性保持一致,比如这里应该是air.TestAppANEs。这个地方要非常注意,包名必须遵循这样的结构,否则运行时会找不到类。
然后在这个包中创建一个Java类:BootBroadCastReceiver,继承BroadcastReceiver,完整代码如下:
然后将Java项目编译为JAR包,然后建立一个ActionScript库项目,最终和JAR包打包为一个ANE文件(略过N多细节,请参阅Adobe文档)。
这里再补充两个细节问题,首先是ADT打包,ANE打包的参数确实很容易弄错,估计第一次打包的同学很难能一次性通过,最后一个参数的点前面还有一个空格,提醒您千万注意了 -platform Android-ARM -C .Android-ARM .
其次是您应该给extension.xml设置一个 ,并使用ActionScript实现一个模拟功能实施,并打包到ANE中,这样方便您在PC测试,否则您会得到不支持调试的提示。
和主项目的整合
ANE制作完毕后,您可以用Flash Builder,在您的主项目上点击右键,属性,库构建路径,在ANE面板上,加入刚才制作的ANE文件(Flash Builder会自动在AIR应用的XML配置文件中加入这个ANE的ID,确保这个ID必须有)。然后在发布的时候,ANE的部分还有一个对勾(确定是否包含),一定记得点上,不然就会找不到类。
先别急着打包,我们还需要修改一下配置文件,打开AIR应用的XML配置文件,找到android部分,加入.BootBroadCastReceiver的定义,完整结构如下:
注意.BootBroadCastReceiver这个定义很关键,以.开头才能实现随系统启动的功能。
然后…就没有然后了。您可以测试您的应用,安装后让手机重启,不出意外的话,您可以看到自己的应用在系统启动完毕后,就会自己启动并显示主界面。
您也可以不显示主界面,而是注册一个Service,实现后台的通知和提醒。
‘贰’ Android上一个很好用的App—AirDroid
用Mac做开发的小伙伴,应该经常使用Mac电脑自带的Airdrop。用它能够轻松实现Mac电脑和手机的文件互传。我经常使用Airdrop,把iPhone手机里面的照片、视频、或者其他文件发送到电脑进行保存和二次编辑。这也是我一度不愿意使用Android手机的原因,苹果爸爸打造的全方位生态,一旦入驻,就再也不想换到Android的蛮荒阵营。但是为了完成学习Android的目标而不得不用Android手机的我,最近发现有第三方在Android上实现了类似Airdrop的功能——[AirDroid]。( https://www.airdroid.com/zh-cn/ )。
“AirDroid”是一个全平台应用,能够在Android,iPhone,Mac和Window平台上统一使用。但是对免费用户限制了流量,每月只有200M流量。但是对于一般用户,传送文字文件的话,完全够用了。除了传送文件,“AirDroid”还可以读取手机联系人,短信和拨打电话的功能,不过作为开发的程序猿,这些功能使用就很少了。由于工作性质的不同,对你的工作,或许还有其他方便的功能,等待你去发现。
作为提升工作的工具,值得使用。
关注和喜欢都是对我的鼓励和支持~
‘叁’ Android开发之蓝牙(Bluetooth)
在上一篇中有介绍了Wifi与网络连接处理
Android开发之WiFi与网络连接处理
下面,来继续说说Android中蓝牙的基本使用。
Bluetooth是目前使用的最广泛的无线通讯协议之一,主要针对短距离设备通讯(10米),常用于连接耳机、鼠标和移动通讯设备等。
值得一提的是:
android4.2新增了部分新功能,但是对于Bluetooth熟悉的人或许开始头疼了,那就是Android4.2引入了一个新的蓝牙协议栈针BLE。谷歌和Broadcom之间的合作,开发新的蓝牙协议栈,取代了基于堆栈的Bluez。因此市场上出现了老设备的兼容问题,很多蓝牙设备在android4.2手机上不能正常使用。
BluetoothAdapter简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象。
first:we need permission
要操作蓝牙,先要在AndroidManifest.xml里加入权限
**下面来看看如何使用蓝牙。 **↓↓↓****
Demo已就绪:
返回值:如果设备具备蓝牙功能,返回BluetoothAdapter 实例;否则,返回null对象。
打开蓝牙设备的方式:
1.直接调用函数enable()去打开蓝牙设备 ;
2.系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。
注意: 1.如果蓝牙已经开启,不会弹出该Activity界面。2.在目前大多数Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关 ,状态会随着飞行模式的状态而发生改变。
1. 搜索蓝牙设备
使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备
startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进行对其他蓝牙设备的搜索,该过程会持续12秒。该方法调用后,搜索过程实际上是在一个System Service中进行的,所以可以调用cancelDiscovery()方法来停止搜索(该方法可以在未执行discovery请求时调用)。
系统开始搜索蓝牙设备
^( *  ̄(oo) ̄ ) ^ 系统会发送以下三个广播:
2.扫描设备
3.定义广播接收器接收搜索结果
4.注册广播
获取附近的蓝牙设备
第一步建立连接:首先Android sdk(2.0以上版本)支持的蓝牙连接是通过BluetoothSocket建立连接,服务端BluetoothServerSocket和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接。
(这里的服务端和客户端是相对来说的)
两个蓝牙设备之间的连接,则必须实现服务端与客户端的机制。
当两个设备在同一个RFCOMM channel下分别拥有一个连接的BluetoothSocket,这两个设备才可以说是建立了连接。
服务端设备与客户端设备获取BluetoothSocket的途径是不同的。
1,服务端设备是通过accepted一个incoming connection来获取的,
2,客户端设备则是通过打开一个到服务端的RFCOMM channel来获取的。
服务端
通过调用BluetoothAdapter的(String, UUID)方法来获取BluetoothServerSocket(UUID用于客户端与服务端之间的配对)
客户端
调用BluetoothService的(UUID)方法获取BluetoothSocket(该UUID应该同于服务端的UUID)。
调用BluetoothSocket的connect()方法(该方法为block方法),如果UUID同服务端的UUID匹配,并且连接被服务端accept,则connect()方法返回。
数据传递,通过以上操作,就已经建立的BluetoothSocket连接了,数据传递无非是通过流的形式
获取流
该类就是关于远程蓝牙设备的一个描述。通过它可以和本地蓝牙设备---BluetoothAdapter连接通信。
好多东西我也不知道怎么描述,下面给出Demo:
刚好有刚学习的小伙伴问我ListView怎么用,那我就用ListView。
源码:
RairDemo
GitHub: https://github.com/Rairmmd/android-demo
Coding: https://coding.net/u/Rair/p/RairDemo/git
‘肆’ 安卓Adobe AIR有什么用
Adobe Air是利用Adobe公司的Flash技术开发的视频播放平台。这个视频播放终端运行平台 它主要的功能就是可以在网上 看视频,跟Flash 功能相同,但是更强大。
对于用户来说,Adobe AIR 实现的跨平台应用,使其不再受限于不同的操作系统,在桌面上即可体验丰富的互联网应用。并且是比以往更低的资源占用、更快的运行速度和顺畅的动画表现。
对Android系统要求:
‘伍’ Android上开发Airplay Server端的问题求助
前段时间刚做完Airplay的相关应用,现在就开发的一点经验和大家分享一下。
首先,说说Airplay吧,Airplay可以将iPhone,iPad或iPodtouch等设备上的视频、音频以及图片传输到第三方认证设备上,一般是在AppleTV或Air port设备上,但其实,现在很多第三方的android设备也可以支持Airplay了,像阿里云或小米的盒子都支持Airplay投影了,而且效果都还不错。
其实,Airplay算是苹果公司定义的一种协议,或是一种技术吧,所以,按照惯例,这项技术是不开源的,对外封闭。而Android端,可以使用一套的多屏互动方案的,叫做DLAN,即Digital Living Network Alliance,它的协议是公开的。在次,得感谢诸多技术大牛,破解了Airplay,包括音频投影服务中使用的RSA私钥,和一份具体的协议说明(http://nto.github.io/AirPlay.html)。
下面,就Airplay协议内容大概的说明一下,当然,大家直接看上述地址中的内容也许更清楚,本人能力有限,大概的说说我的部分理解。
1.使用multicastDNS协议来进行服务发现,在android端可以用JmDNS来实现。
一般我们会发布两个服务:AirTunes service(RAOP)和AirPlay Service,前者用于音频流的投影,后者用于图片和视频内容的投影。
2.协议内容(一):AirTunesService
2.1.协议中的音频流支持RTSP协议。
1)IOS设备向服务端发送的RTSP请求包括
ANNOUNCE:告诉RTSP服务器关于流的各种属性
SETUP:告诉RTSP服务器初始化一个record session,同时通知必要的传输信息。
RECORD:请求服务器开始流的传输
FLUSH:请求停止传输
TEARDOWN:请求结束RTSP会话
PAUSE, OPTIONS,
GET_PARAMETER,
SET_PARAMETER:可用于音量控制,Metadata:其中包括音频曲名,歌手名,专辑名,封面图片,播放进度信息……
POST and GET
2)RTP流,用于传输音频数据等。(如果说,RTSP用于发起/终结流媒体,那么RTP则传输流媒体数据 )
这里音频包是几乎完全兼容RTP协议。RTP包按有效载荷的不同类型分为以下几种:
Audio packets:其有效载荷为经过加密的audio data
Sync packets:服务端每秒钟会收到一个同步包,来将RTP中的timestamps与用于始终同步的NTP time关联起来
Retransmit packets:对丢失的audio packets进行重传
Timing packets:用于音频的主时钟同步
2.2音频数据加密解密
Client:客户端首先会用RSA公钥,利用OAEP加密方式自动生成一个随机的128位AES key,然后和rsaaes key,aesiv一起发送给Server。
Sever:服务端利用指定的RSA私钥来解密AES key,然后将解密结果返回给Client。
Client:客户端利用RSA公钥要解密收到的数据,若解密结果和之前自动生成的随机数一致,则表明服务端解密成功。
‘陆’ Adobe AIR for Android,,,手机上安装了有什么用
首先,你要明白所谓Adobe AIR
AIR是Adobe新推出的一个开发平台,涉及 Flash、HTML、Ajax等酷炫元素。
如果你想看看效果可以下载AIR IPHONE模拟器或国外的一些作品
http://www.adobe.com/cn/procts/air/swf/Air_homepage_fma.swf
关于Adobe AIR
Adobe® Integrated Runtime (AIR™)允许你利用现有的web开发技能(包括Flash, Flex, HTML, JavaScript, Ajax)优势,建立和配置跨平台(或跨操作系统)的桌面RIA(Internet Applications)应用。
AIR能使你在熟悉的环境下工作,去利用你觉得的最舒适的工具,并且通过支持Flash, Flex, HTML, JavaScript, and Ajax,去建立接近你需要的尽可能好的体验。
比如应用程序能用下列一个或一个技术的组合来开发:
Flash / Flex / ActionScript
HTML / JavaScript / CSS / Ajax
PDF can be leveraged with any application
因此,AIR 应用程序可以是下列几种情况:
基于 Flash or Flex: 基础内容是 Flash/Flex (SWF)的应用程序
基于 Flash or Flex 附带HTML 或 PDF. 基础内容是Flash/Flex (SWF) 带有 HTML (HTML, JS, CSS) 或PDF内容的应用程序
HTML为基础. 基础内容是HTML, JS, CSS的应用程序
HTML为基础附带 Flash/Flex或 PDF. 基础内容是HTML带有Flash/Flex (SWF)或PDF 内容的应用程序
用户与AIR应用程序的交互操作,与他们使用本地桌面程序的方法是一样的。AIR虚拟机runtime一旦被安装在用户的计算机上,AIR应用程序就能象其他桌面应用程序一样,被安装和运行。
由于 AIR 是一个应用程序运行时,它具有很少或没有可见的用户界面,您可以对应用程序和经验,为用户提供的完全控制。 运行库用于部署应用程序提供一个一致的互操作系统平台和框架,因此消除了跨浏览器测试通过跨桌面确保一致的功能和交互。 开发适用于特定的操作系统,而你不是面向运行库。 这有多项好处:
(翻译别扭请看原文Since AIR is an application runtime, it has little or no visible user interface and you have complete control over the application and the experience it provides to users. The runtime provides a consistent cross-operating system platform and framework for deploying applications and therefore eliminates cross-browser testing by ensuring consistent functionality and interactions across desktops. Instead of developing for a specific operating system, you target the runtime. This has a number of benefits: )
应用程序开发跨越多个平台,这些都不需要你额外的工作。
应用程序可以用你熟悉的web技术和设计模式快速建立,而不用学习传统的复杂的本地桌面开发技术,不用学习底层开发语言如c或c++,也不需要学习每一个特定的操作系统的底层API技术。
当开发基于AIR的应用程序时,你可以利用的框架和API的优势
特定的基于AIR运行时的APIs ,和 AIR 框架
在swf文件里使用的ActionScript APIs 和Flex 框架
AIR提供一个新的范例,大大地改变了应用程序被创造,部署和体验的方式。 您取得更多创造性的控制,并且能扩展您的Flash, Flex, HTML, 和基于Ajax的应用到桌面应用,无需学会传统桌面开发技术。(翻译不好,下面可以自己看看原文)AIR delivers a new paradigm that dramatically changes how applications can be created, deployed, and experienced. You gain more creative control and can extend your Flash, Flex, HTML, and Ajax-based applications to the desktop, without learning traditional desktop development technologies.
" for Android" 就是使用于安卓操作系统的版本。
希望我的回答能给楼主点帮助。