大多数Android设备都具有测量运动,方向和各种环境条件的内置传感器。Android平台支持三大类传感器。
运动传感器
环境传感器
位置传感器
一些传感器是基于硬件的,一些是基于软件的传感器。无论传感器是什么,android允许我们从这些传感器获取原始数据,并在我们的应用程序中使用它们。对于这个android,我们提供了一些类。
Android提供SensorManager和Sensor类,以便在我们的应用程序中使用传感器。为了使用传感器,您首先需要做的是实例化SensorManager类的对象。可以实现如下。
SensorManager sMgr;
sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
您需要做的是通过调用SensorManager类的getDefaultSensor()方法实例化Sensor类的对象。其语法如下:
Sensor light;
light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT);
一旦声明了传感器,您需要注册它的监听器并覆盖两个方法,这些方法是onAccuracyChanged和onSensorChanged。其语法如下 -
sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
}
获取支持的传感器列表
您可以通过调用getSensorList方法获取设备支持的传感器列表,该方法将返回包含其名称和版本号以及更多信息的传感器列表。然后,您可以迭代列表以获取信息。其语法如下:
sMgr=(SensorManager)this.getSystemService(SENSOR_SERVICE);Listlist=sMgr.getSensorList(Sensor.TYPE_ALL);for(Sensorsensor:list){}
除了这些方法之外,还有其他用于管理传感器框架的SensorManager类提供的方法。这些方法如下:
没有
方法和描述
1
getDefaultSensor(int type)
该方法获取给定类型的默认传感器。
2
getOrientation(float [] R,float [] values)
此方法返回剪贴板上当前主剪辑的描述,但不返回其数据的副本。
3
getInclination(float [] I)
该方法计算从倾斜矩阵的弧度的地磁倾角。
4
registerListener(SensorListener listener,int sensors,int rate)
该方法注册传感器的监听器
5
unregisterListener(SensorEventListener侦听器,传感器传感器)
该方法取消注册其注册的传感器的侦听器。
6
getOrientation(float [] R,float [] values)
该方法基于旋转矩阵计算设备的方向。
7
getAltitude(float p0,float p)
该方法计算海拔高度(以米为单位),大气压力和海平面压力。
例
下面是一个演示使用SensorManager类的例子。它创建一个基本应用程序,允许您查看设备上的传感器列表。
要实验这个例子,你可以在一个实际的设备或一个模拟器中运行这个例子。
脚步
描述
1
您将使用Android Studio在一个包com.example.sairamkrishna.myapplication下创建一个Android应用程序。
2
修改src / MainActivity.java文件以添加必要的代码。
3
修改res / layout / activity_main以添加相应的XML组件。
4
运行应用程序并选择一个正在运行的Android设备并在其上安装应用程序并验证结果。
以下是修改的MainActivity.java的内容。
packagecom.example.sairamkrishna.myapplication;importandroid.app.Activity;importandroid.hardware.SensorManager;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.TextView;importjava.util.List;importandroid.hardware.Sensor;importandroid.hardware.SensorManager;publicclassMainActivityextendsActivity{TextViewtv1=null;privateSensorManagermSensorManager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv1=(TextView)findViewById(R.id.textView2);tv1.setVisibility(View.GONE);mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);ListmList=mSensorManager.getSensorList(Sensor.TYPE_ALL);for(inti=1;i
"+mList.get(i).getName()+"
"+mList.get(i).getVendor()+"
"+mList.get(i).getVersion());}}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main,menu);returntrue;}@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.intid=item.getItemId();//noinspection SimplifiableIfStatementif(id==R.id.action_settings){returntrue;}returnsuper.onOptionsItemSelected(item);}}
以下是xmlactivity_main.xml的修改内容。
在下面的代码中,abc表示vue5.com的标志
以下是res / values / string.xml的内容。
My ApplicationHello world!Settings
以下是AndroidManifest.xml文件的内容。
我们尝试运行我们刚刚修改的应用程序。我假设你在做环境设置时创建了AVD。要从Android studio运行应用程序,请打开一个项目的活动文件,然后
从工具栏中单击运行图标。Android工作室在您的AVD上安装应用程序并启动它,如果您的设置和应用程序一切正常,它将显示以下仿真器窗口 -
现在,如果您将看到设备屏幕,您将看到设备支持的传感器列表及其名称和版本以及其他信息。
如果您在不同设备上运行此应用程序,输出将不同,因为输出取决于设备支持的传感器数量。