移动应用传感器,Location,Sensor,Network,
标题图该文章属于原创,转载请注明:
http://www.jianshu.com/p/906ecb21e325
前言
软件技术(移动应用开发)专业方向是未来发展必不可少的,实践是检验真理的唯一标准,学好才是硬道理。
移动
1.如今为了充分利用智能手机的GPS定位信息,创建了O2O的商业模式,大同路线上与线下的信息流和商流,极大地推动了移动互联网的发展,GPS是全球定位系统,是20实际70年代由美国陆海空三军联合研制的新一代控件卫星导航定位系统。
GPS不需要地面基站进行辅助矫正定位信息,就能准确定位。24颗GPS卫星在离地面22000KM的高空上,以12小时为周期环绕地球运行,使得在任意时刻,地面的任意一点都可同时观测到4颗以上的卫星,在任何天气情况下随时获取可靠的位置信息。
GPS综合定位的话,精度可达厘米级和毫米级。但民用领域开发的精度约为10米,GPS定位易受周围环境的影响,并非一下就能定位成功,因此需要在程序代码中做好各种防范措施。
建议在室外空旷的地方测试GPS是否定位成功,避免在有遮挡的地方测试,在室内很有可能无法成功定位。
2.Android系统提供了位置服务的API,位置服务Location-Based Services,简称LBS。在开发过程中主要用到LocationManager和LocationProviders对象。
LocationManager可以用来获取当前的位置,追踪设备的移动路线,或设定敏感区域,在进入或离开敏感区域时设备会发出特定警报。
在获取到LocationManger对象后,还需要指定LocationManager的定位方法,就可以通过调用LocationManager.getLastKnowLocation()方法获取当前位置。
Location是一个代表位置信息的抽象类,用它可以获取所有的位置数据,GPS定位返回的位置数据中可以获取到当前的:高度,方向,经度和速度信息。
在定位时,需要实现一个LocationListener位置监听接口,共有四个方法:void onLocationChanged(Location location):位置改变回调方法;void onStatusChanged(String provider,int status,Bundle extras):状态改变回调方法;void onProviderEnabled(String provider):定位提供者启用回调方法;void onProviderDisabled(String provider):定位提供者停用回调方法。
LocationProviders则是提供定位功能的组件集合,集合中的每种组件以不同的技术提供设备的当前位置,区别在于定位的精度,速度和成本等方面。
LocationProvider分两种: LocationManager.GPS_PROVIDER:通过GPS定位,较为精确,但比较耗电;LccationManager.NETORK_PROVIDER):通过网络定位,对定位精度不高或省电情况可考虑使用。
3.首先Android平台支持的传感器类型有哪些?
TYPE_ACCELEROMETER,TYPE_AMBIENT_TEMPERATURE,TYPE_GRAVITY,TYPE_GYROSCOPE,TYPE_LIGHT,TYPE_LINEAR_ACCELERATION,TYPE_MAGNETIC_FIELD,TYPE_ORIENTATION,TYPE_PRESSURE,TYPE_PROXIMITY,TYPE_RELATIVE_HUMIDITY,TYPE_ROTATION_VECIOR,TYPR_TEMPERATURE,哇!终于敲完了,共13个。
描述:(参考资料地址:http://android.xsoftlab.net/guide/topics/sensors/sensors_overview.html)
TYPE_PROXIMITY:硬件,以cm为单位测量一个物体相对于设备屏幕的临近程度,这种传感器的典型用例是检测是否手机被放到人的耳旁。用于检测通话过程中手机的位置。
TYPE_ACCELEROMETET:硬件,以m/s2[Math Processing Error]为单位测量三个轴向(x,y,和z)加速度,包括重力。用于运动检测(震动,倾斜等)。
TYPE_ROTATION_VECTOR:软件或硬件,通过提供设备的旋转矢量的三个元素来测量设备的方向。用于运动检测和旋转检测。
TYPE_LIGHT:硬件,以lx为单位测量周围环境的光线级别(光照度)。用于控制屏幕亮度。
TYPE_MAGNETIC_FIELD:硬件,以μT为单位测量周围所有三个物理轴(x,y,z)的环境地磁场。用于创建一个罗盘。
TYPE_PRESSURE:硬件,以hPa或mbar测量周围环境空气压力。用于检测气压的变化。
TYPE_ROTATION_VECTOR:软件或硬件,通过提供设备的旋转矢量的三个元素来测量设备的方向。用于运动检测和旋转检测。
TYPE_GYROSCOPE:硬件,以三个物理轴(x,y和z)周围的每个rad / s来测量设备的旋转速率。用于检测旋转。
TYPE_ORIENTATION:软件,测量设备绕所有三个物理轴(x,y,z)旋转的角度。你能通过使用重力传感器和磁场传感器,结合getRotationMatrix()方法,获取设备的倾斜矩阵和旋转矩阵。用于检测设备的位置。
TYPE_ACCELEROMETER:硬件,测量施加到所有三个物理轴(x,y和z)上的装置的加速力(m / s2),包括重力。用于运动检测(震动,倾斜等)。
TYPE_LINEAR_ACCELERATION:软件或硬件,测量施加到所有三个物理轴(x,y和z)上的装置的加速力(m / s2),不包括重力。用于检测单个轴线的加速度。
TYPE_GRAVITY:软件或硬件,测量应用于所有三个物理轴(x,y,z)上的设备的重力(m / s2)。用于运动检测(震动,倾斜等)。
4.传感器必要操作
//获取传感器管理对象
SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//获取传感器的类型(TYPE_ACCELEROMETER:加速度传感器)
Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//创建传感器监听器
SensorEventListener msensorEventListener = new SensorEventListener(){
//当传感器的值改变的时候回调该方法
@Override
public void onSensorChanged(SensorEvent event){
}
//当传感器精度发生改变时回调该方法
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy){
}
};
//为传感器注册监听器
mSensorManager.registerListener(msensorEventListener, mSensor, SensorManager.SENSOR_DELAY_GAME);
//取消监听
mSensorManager.unregisterListener(msensorEventListener);
5.Android的网络访问方法:
HttpURLConnection参考文档资料:http://android.xsoftlab.net/reference/java/net/HttpURLConnection.html
一种是基于Socket的网络连接;另一种是基于HTTP协议的网络连接。
HttpURLConnection是基于HTTP协议的,其底层通过Socket实现通信。网络超时设置,防止网络异常的情况下,可能会导致程序僵死而不继续往下执行,所以网络超时的问题会导致程序僵死。
HTTP(超文本传输协议)是一个基于请求响应模式的,无状态的,应用层的协议。客户端向服务器发送HTTP请求包括:请求方法,请求头和正文。
Socket由IP地址和端口号两部分组成。IP地址用来定位设备,端口号用来定位应用程序或者进程。Socket的英文原义是"孔"或"插座"。Socket通信方式连接一般适用于实时要求比较高的应用。注意:记得在清单文件里添加网络访问的权限,android.permission.INTERNET
常用函数
创建函数原型:
int socket(intdomain, inttype, intprotocol);
// domain:协议域,又称协议族(family)。 type:指定Socket类型。 常用的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。 protocol:指定协议。
6.HttpURLConnection类重要方法
参考地址链接:http://android.xsoftlab.net/reference/java/net/HttpURLConnection.html
String getResponseMessage(),void setRequestMethod(String Methond),InputStream getErrorStream(),int getResponseCode()。
//详情参考地址内容
7.JSON是一种非常流行的轻量级的数据交换方式,RESTful服务几乎都在使用JSON格式进行数据传输。
JSON了解地址:https://baike.baidu.com/item/JSON/2462549?fr=aladdin
在JSON中,数组以左中括号“["开始,右中括号"]"结束,对象是以左中括号“{"开始,右中括号"}"结束。"键”是关键字,用字符串表示,"值"可以是数值,数组等。每个"键"后跟一个冒号":"与值隔开。
用JSON表示如下:
{
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
}
8.Which job that you can use the sensor framework to do?
I can do determine which sensors are available on a device, acquire raw sensor data and define the minimum rate at which you acquire sensor data, register and unregister sensor event listeners that monitor sensor changed, determine an individual sensor's capabilities, such as its maximum range, manufacturer, power requirements, and resolution.
9.You can access these sensors and acquire raw sensor data by using the Android sentor framework. The sensor framework is part of the ramework.The sensor framework is part of the android.hardware package and includes the following classes and interfaces.
参考地址:http://android.xsoftlab.net/guide/topics/sensors/sensors_overview.html
SensorManager: You can use this class to create an instance of the sensor service.This class provides various methods for accessing and listing sensors, registering and unregistering sensor event listeners, and acquiring orientation information. This class also provides several sensor constants that are used to report sensor accuracy, set data acquisition rates, and calibrate sensors.
SensorEvent: The system uses this class to create a sensor event object, which provides information about a sensor event. A sensor event object includes the following information: the raw sensor data, the type of sensor that generated the event, the accuracy of the data, and the timestamp for the event.
Sensor: You can use this class to create an instance of a specific sensor. This class provides various methods that let you determine a sensor's capabilities.
SensorEventListener: You can use this interface to create two callback methods that receive notifications(sensor events) when sensor values change or when sensor accuracy changes.
后续
可能存在出现错误的地方,欢迎指正,如果对于文章中的某些部分有不同的理解和想法,或者有更好的想法,欢迎留言讨论。
关注我,每天都有优质技术文章推送。工作,学习累了的时候放松一下自己。
欢迎大家关注我的微信公众号:「醉翁猫咪」
扫描二维码添加关注