安卓的传感器 功能开发开发框架有什么功能

AppCan简单了解——移动开发技术总结 - AppCan - YBPAN
AppCan简介
AppCan是正益无线自主研发的国内首个HTML5移动应用开发平台,可以简单、快速、高效地开发移动应用。 AppCan支持跨平台开发,实现一次开发,多平台、多分辨率自动适配,目前已经支持的平台有iOS、Android、Symbian、Windows Phone。
同时AppCan也是国内Hybrid App混合模式开发的倡导者,AppCan应用引擎支持Hybrid App的开发和运行。并且着重解决了基于HTML5的移动应用目前“不流畅”和“体验差”的问题。使用AppCan应用引擎提供的Naitve交互能力,可以让HTML5开发的移动应用基本接近Native App的体验。
而且AppCan提供强大的设备调用能力,电话、短信、相机、LBS、传感器、数据库等常用的手机功能,开发者可以通过JS接口调用,轻松构建移动应用。
AppCan为开发者提供一体化解决方案,让移动应用开发更加方便快捷:包括Hybrid应用引擎、HTML5开发工具、UI框架、应用模拟器、云端打包服务、应用管理服务、运营统计服务。
AppCan框架解析
AppCan开发引擎
UEX UI框架
UEX 平台硬件接口
AppCan 集成开发环境
AppCan应用服务平台
平台构架图
AppCan提供了丰富的界面模板、高效的窗口管理系统、窗口消息系统和数据视图映射库,构成了强大的AppCan应用开发框架,并以AppCan IDE集成开发环境形式提供给开发者。
AppCan IDE集成开发环境提供应用向导和界面向导,预置数百种界面模板和多套应用模板。开发者可以利用丰富的平台调用接口和各种扩展功能,采用HTML5技术快速开发功能强大的富客户端应用。通过定制的UI适配方案,开发者可以用极少的工作量完成各种终端的适配工作。
提供了丰富的平台接口库,覆盖了移动应用开发中的常用场景。同时,还提供了数十种应用插件和灵活的自定义插件架构,方便开发者快速集成自定义功能到应用开发中。
AppCan特性
多窗口机制:常见的应用都是单窗口,AppCan应用支持多窗口
原生UI与交互支持:大量原生UI与交互支持(如Action Sheet等)
第三方开放平台支持: 相比国外中间件更具本土优势, 微信、QQ、新浪微博、支付宝等
HTML5+CSS3支持:完全兼容HTML5,并丰富支持CSS3
终端设备调用API:提供大量设备调用API,如各种传感器、摄像头等
在线编译发布: 无需本地开发环境,通过在线设置图标和启动图片、证书、发布渠道,一键编译发布应用
多平台支持且体验一致:完美支持Android、IOS、Windows Phone
人性化的集成开发环境: 提供应用向导和界面向导,预置数百种界面模板和多套应用模板,支持应用本地调试和模拟
支持全包/部分文件加密:全新升级的强劲加密方式,支持全包加密及指定文件加密,全方位保障代码安全
丰富插件支持: 开放插件接口,支持第三方插件,预置数十种应用插件
快速准确的消息推送:提供面向指定用户或群组的即时消息推送服务
Android、IOS、Windows Phone等移动平台
AppCan所具备的能力
触控/手势界面——支持大部分类似原生系统的手势,包括点击、长按、拖动、滑动等等手势动作,并且提供了大量的控件:按钮、对话框、ListView、文本框、图片轮播、树形结构等等
分辨率自适应——AppCan 提供了整套的UI开发框架,应用引擎自动调整浏览器默认缩放比率,使其接近或等于屏幕硬件分辨率,采用弹性盒子框架,自动适配各种屏幕分辨率。采用相对大小方案,使应用在不同分辨率、不同屏幕精度,依然使界面保持最符合人体感受的大小和操作体验。通过这种方式,可以帮助开发者更有效的融合原生控件和网页界面,使其保持完美的布局。在适配新分辨率终端时,AppCan可以保证最小的网页代码修改
音频/视频播放——AppCan提供了uexAudio和uexVideo接口,能够很方便的进行音频和视频的播放,并支持录制的功能
录音功能——AppCan提供的uexAudio接口可以进行可视化录音以及后台录音方式,并可以进行音效添加
访问文件系统——AppCan提供的uexFileMgr接口可以很方便的进行文件的创建、打开、编辑、移动、删除等操作
调用拍照——AppCan提供的uexCamera接口可以调用原生的相机进行拍照也可以调用自定义的相机进行拍照,同时可以选择对拍摄的照片是否进行压缩,以及进行压缩时压缩的比例控制
调用电话/短信——AppCan提供的uexCall和uexMMS接口可以调用系统的电话和短信模块进行打电话和发短信操作
本地数据库访问——AppCan提供uexDataBaseMgr接口进行本地数据库的访问,可以进行数据库的相关操作
浮动窗口——AppCan支持在屏幕上显示小控件,通过uexWidget接口就能够很方便的实现
网络请求——AppCan提供了uexDownloaderMgr、uexSocketMgr、uexUpLoaderMgr、uexXmlHttpMgr等网络相关接口,可以很方便实现网络数据请求和处理,可以进行文件的上传下载等
本地通知提醒——AppCan的uexLocalNotification接口可以进行消息的通知提醒操作
同时还支持设备的震动、定位、打开联系人、打开传感器、调用剪贴板等等
支持丰富第三方SDK:百度地图、支付宝、新浪微博、微信分享等等
通过对各大手机操作系统(如iOS、Android)和系统中浏览器引擎底层Webview及其API的封装和扩展,将HTML标准中不提供支持的本地功能(比如摄 像头,短信,电话等)以Javascript API接口的形式开放给HTML页面调用,同时提供一套完整的Callback机制,实现HTML页面直接与操作系统底层的交互通信,Javascript脚本语言直接与操作系统C/C++/JAVA/Object-C等原生语言之间通信,实现系统与HTML页面的无缝融合;通过在UI层次上实现一套模拟系统级别的应用(Widget)及应用管理机制、窗口(Window)及多窗口管理机制,达到基于HTML5开发移动应用的目的,实现核心引擎的跨平台能力
应用引擎的架构:
支持插件扩展——支持丰富的插件,可以是界面的也可以是Native的,你也可以自己进行插件编写
与其他平台的比较
Sencha Touch
采用hybird模式,支持web app及native app两种模式
采用hybird模式,支持web app及native app两种模式
更偏向于webapp的开发模式
同时支持iOS、Android、Symbian、Windows Phone等移动端
同时支持iOS、Android、Symbian、Windows Phone等移动端
同时支持iOS、Android、Symbian、Windows Phone等移动端
支持HTML5开发,CSS3实现布局优化及交互提升
支持HTML5开发,CSS3实现布局优化及交互提升
支持HTML5开发,CSS3实现布局优化及交互提升
引入原生UI控件与交互支持(如Action Sheet等),并且有系统的NativeUI扩展
通过UIWebView的代理和plguin插件交互,但需要开发者自己进行打补丁
通过Ext Core库来进行事件、动画等交互操作
基于Eclipse的开发工具,集成UI控件与应用管理
PhoneGap XDK、以及一些JS编写工具或者Eclipse
Aptana Studio、JSEclipse(Eclipse插件)等JS编辑工具
提供应用全功能模拟器,方便开发调试
使用Android和IOS的模拟器
使用Android和IOS的模拟器
提供消息推送插件或者进行其他推送的SDK集成
可以进行其他推送SDK的集成
可以进行其他推送SDK的集成
应用持续发布和整体管理
提供成熟的企业级应用发布和管理方案
没有特别成熟的方案,大部分是企业自己摸索
提供了完美的移动解决方案,是Web方案
一套完整的开发环境,IDE为标准的Eclipe插件,支持智能提醒,自动补齐,代码自动生成,模拟器为标准的Chrome扩展插件,支持单步调试,Log输出等
无标准的IDE及模拟器,不同平台的开发要求安装不同的开发环境
无标准的IDE及模拟器,不同平台的开发要求安装不同的开发环境
启动速度快
页面切换相应速度不错
数据请求较快
页面切换响应慢
数据请求慢
动画效果好(可以媲美原生)
数据请求比较快
多窗口支持与动画
支持多窗口及native平台自身的窗口间动画
不支持多窗口
不支持多窗口
本地化接口非常丰富
官方提供了很多第三方插件,省去不少开发时间
本地化接口丰富
支持可扩展(非常有利于定制功能)
本地化接口丰富
支持可扩展(非常有利于定制功能)
比较少,一些文档缺失,很多描述表达也不完善,造成很多开发者很难入手
国内团队支持,沟通无障碍
支持力度还不错
还有官方论坛提供解决渠道
基本上很难得到技术支持的相应
基本上很难得到技术支持的相应
企业级平台可以购买解决方案
需要购买授权
开发成本和维护
相对较低,有成熟的解决方案和完整的开发环境和一整套工具
相对较高,维护成本较高
相对较高,维护成本较高
易扩展和灵活集成
提供丰富的接口和插件,能够快速实现扩展和集成
能够实现扩展和集成,集成方案可能需要自己考虑
能够实现扩展和集成
数据存储和安全
提供一整套的安全解决方案来保证数据的安全和数据访问
采用加密方式保证数据安全,通过客户端服务服务端来获取数据,不直接访问数据库
采用加密方式保证数据的安全
AppCan的支持
AppCan官方提供了相关的文档和Demo示例。
AppCan官方也提供了企业级移动平台的解决方案,提供培训和专业支持,并提供一整套的开发环境和工具,实现应用的本地和云端快速打包
有针对企业的专业客服,联系方便
AppCan的不足
AppCan的专业文档存在不足,说明不是很充分
目前采用Html5的移动开发技术还不是很成熟,跟原生相比还是存在性能和易用性的差距
现在还处在不断的开发迭代版本中,所以会存在一些稳定性的问题
应用引擎还不是很稳定,对某些设备或分辨率适配不够好
性能问题和预防措施
跟原生的开发相比较,通过AppCan开发的应用确实会存在性能差距。那么就需要进行一些改进和优化。
具体的建议如下:
尽可能的减少动画、视频播放等使用,因为这些在引擎中进行渲染会需要很长时间,会影响使用者的体验
尽可能减小单次数据的量,采用多线程多次进行数据获取
正确的使用和销毁控件
及时的进行不需要的页面销毁
遵守AppCan的编码和控件使用规则,不乱用
避免复杂逻辑存在,对于非常复杂的逻辑,不建议在此进行
目前Html5实现移动平台的技术还不是很成熟,存在很多问题,并且AppCan现在处于版本不断迭代的过程,在进行应用开发的时候需要考虑到后期的平台更新兼容问题。
3,564 1,549 432 417 387 362 331 304 296 280Android设备GPS/LBS/定位 传感器 电话API 短信彩信SMS/MMS联系人/Contacts -Android特色开发,使用传感器
1、传感器简介
手机中内置的传感器是一种微型的物理设备,它能够探测、感受到外界的信号,并按一定规律转换成我们所需要的信息。手机通常都会支持多种类型的传感器,如光照传感右器、加速度传感器、地磁传感器、压力传感器、温度传感器等。
当然,Android只是负责将这些传感器所输出的信息传递给我们,至于具体如何去利用这些信息就要充分发挥开发者的想象力了。目前市场上很多的程序都有使用到传感器的功能,比如最常见的赛车游戏,玩家可以通过旋转设备来控制赛车的前进方向,就像是在操作方向盘一样。除此之外,微信的摇一摇功能,手机指南针等软件也都是借助传感器来完成的。
2、光照传感器
光照传感器在Android中的应用还是比较常见的,比如系统就有个自动调整屏幕亮度的功能。它会检测手机周围环境的光照强度,然后对手机屏幕的亮度进行相应地调整,以此保证不管是在强光还是弱光下,手机屏幕都能够看得清。
package com.example.test.
import android.app.A
import android.hardware.S
import android.hardware.SensorE
import android.hardware.SensorEventL
import android.hardware.SensorM
import android.os.B
import android.widget.TextV
import com.example.test.R;
* Created by Administrator on .
public class LightSensorActivity extends Activity {
private TextView txtL
//SensorManager是系统所有传感器的管理器,有了它的实例之后就可以调用getDefaultSensor()方法来得到任意的传感器类型了
private SensorManager sensorM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor_light);
txtLevel = (TextView) findViewById(R.id.txt_light_lever);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
//这里使用Sensor.TYPE_LIGHT常量来指定传感器类型,此时的Sensor实例就代表着一个光照传感器
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
*调用SensorManager的registerListener()方法来注册SensorEventListener才能使其生效,registerListener()方法接收三个参数
* 第一个参数就是SensorEventListener的实例,
* 第二个参数是Sensor的实例,
* 第三个参数是用于表示传感器输出信息的更新速率,共有SENSOR_DELAY_UI、SENSOR_DELAY_NORMAL、
SENSOR_DELAY_GAME和SENSOR_DELAY_FASTEST这四种值可选,它们的更新速率是依次递增的。
sensorManager.registerListener(listener, sensor, sensorManager.SENSOR_DELAY_NORMAL);
* 调用unregisterListener()方法来释放使用的资源
protected void onDestroy() {
super.onDestroy();
if (null != sensorManager) {
sensorManager.unregisterListener(listener);
//SensorEventListener是对传感器输出的信号进行监听,SensorEventListener是一个接口,其中定义了onSensorChanged()和onAccuracyChanged()这两个方法
private SensorEventListener listener = new SensorEventListener() {
* 当传感器的精度发生变化时就会调用onAccuracyChanged()方法
* @param event SensorEvent参数里又包含了一个values数组,所有传感器输出的信息都是存放在这里的。
public void onSensorChanged(SensorEvent event) {
//values数组中第一个下标的值就是当前的光照强度
float value = event.values[0];
txtLevel.setText(&Current light level is & + value + & lx.&);
* 当传感器监测到的数值发生变化时就会调用onSensorChanged()方法
* @param sensor 传感器
* @param accuracy 变化后的值
public void onAccuracyChanged(Sensor sensor, int accuracy) {
3、加速度传感器
Android中的加速度传感器则是提供了一种机制,使得我们能够在应用程序中获取到手机当前的加速度信息,合理利用这些信息就可以开发出一些比较好玩的功能。
接下来我们尝试利用加速度传感器来模仿一下微信的摇一摇功能。其实主体逻辑也非常简单,只需要检测手机在X轴、Y轴和Z轴上的加速度,当达到了预定值的时候就可以认为用户摇动了手机,从而触发摇一摇的逻辑。那么现在问题在于,这个预定值应该设定为多少呢?由于重力加速度的存在,即使手机在静止的情况下,某一个轴上的加速度也有可能达到9.8m/s2,因此这个预定值必定是要大于9.8m/s2的,这里我们就设定为15m/s2吧。
布局:什么都没有,
package com.example.test.
import android.app.A
import android.hardware.S
import android.hardware.SensorE
import android.hardware.SensorEventL
import android.hardware.SensorM
import android.os.B
import android.widget.T
import com.example.test.R;
* Created by Administrator on .
public class AccelerometerSensorActivity extends Activity {
private SensorManager sensorM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor_accelerometer);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener, sensor, sensorManager.SENSOR_DELAY_NORMAL);
protected void onDestroy() {
super.onDestroy();
if (null != sensorManager) {
sensorManager.unregisterListener(listener);
private SensorEventListener listener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
//加速值可能为负值,所以要取他们的绝对值
float xValue = Math.abs(event.values[0]);
float yValue = Math.abs(event.values[1]);
float zValue = Math.abs(event.values[2]);
if (xValue & 15 || yValue & 15 || zValue & 15) {
//认为用户摇动了手机,触发摇一摇逻辑
Toast.makeText(AccelerometerSensorActivity.this, &摇一摇&, Toast.LENGTH_SHORT).show();
public void onAccuracyChanged(Sensor sensor, int accuracy) {
4、方向传感器
要说Android中另外一个比较常用的传感器应该就是方向传感器了。方向传感器的使用场景要比其他的传感器更为广泛,它能够准确地判断出手机在各个方向的旋转角度,利用这些角度就可以编写出像指南针、地平仪等有用的工具。另外,在本章开始时介绍的通过旋转设备来控制方向的赛车游戏,也是使用方向传感器来完成的。Android获取手机旋转的方向和角度是通过加速度传感器和地磁传感器共同计算得出的,这也是Android目前推荐使用的方式。
例子:制作简易指南针
布局文件:
import android.content.C
import android.hardware.S
import android.hardware.SensorE
import android.hardware.SensorEventL
import android.hardware.SensorM
import android.os.B
import android.support.v7.app.AppCompatA
import android.view.animation.A
import android.view.animation.RotateA
import android.widget.ImageV
public class MainActivity extends AppCompatActivity {
private static final String TAG = &MainActivity&;
private SensorManager sensorM
//指南针的背景图
private ImageView imgC
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgCompass = (ImageView) findViewById(R.id.img_compass);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//获取加速传感器,并为它注册监听器
Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME);
//获取地磁传感器,并为它注册监听器
Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensorManager.registerListener(listener, magneticSensor, SensorManager.SENSOR_DELAY_GAME);
//注:SensorManager.SENSOR_DELAY_GAME为传感器输出信息的更新速度
private SensorEventListener listener = new SensorEventListener() {
float[] accelerometerValues = new float[3];
float[] magneticValues = new float[3];
private float lastRotateD
public void onSensorChanged(SensorEvent event) {
//判断当前是加速传感器还是地磁传感器
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
//注意赋值的时候要调用close方法
accelerometerValues = event.values.clone();
} else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
magneticValues = event.values.clone();
float[] R = new float[9];
float[] values = new float[3];
SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);
SensorManager.getOrientation(R, values);
//values[0]表示是手机围绕Z轴旋转的弧度,Math.toDegrees()方法是将弧度转化成角度
Log.i(TAG, &values[0] is & + Math.toDegrees(values[0]));
//values[0]的取值范围是-180度到180度,其中&180度表示正南方向,0度表示正北方向,?90度表示正西方向,90度表示正东方向。
//将计算出的旋转角度取反,用于旋转指南针背景图
float rotateDegree = -(float) Math.toDegrees(values[0]);
if (Math.abs(rotateDegree - lastRotateDegree) & 1) {
//创建一个动画的实例,参数:旋转的起始角度、旋转的终止角度、后面四个参数用于指定旋转的中心店
RotateAnimation animation = new RotateAnimation(
lastRotateDegree, rotateDegree,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
animation.setFillAfter(true);
//执行旋转动画
imgCompass.startAnimation(animation);
lastRotateDegree = rotateD
public void onAccuracyChanged(Sensor sensor, int accuracy) {
protected void onDestroy() {
super.onDestroy();
if (null!=sensorManager){
sensorManager.unregisterListener(listener);
主题设置:
在AndroidManifest文件里面种application里面的属性theme设置值为@style/AppTheme,而AppTheme里面设置
当然了,Android中支持的传感器远远不只这些,还有压力传感器、温度传感器、陀螺仪传感器等,不过由于这些传感器都不太常用,而且不少Android手机中都没有嵌入这些传感器。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'}

我要回帖

更多关于 安卓传感器开发 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信