Android (安卓)传感器
-
进度圈
大多数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); List<Sensor> list = sMgr.getSensorList(Sensor.TYPE_ALL); for(Sensor sensor: list){ }
除了这些方法之外,SensorManager类还提供了其他方法来管理传感器框架。这些方法在下面列出-td> td> td> td> td>方法 说明 getDefaultSensor(int type) 此方法获取给定类型的默认传感器。 getInclination(float[] I) 该方法从倾斜矩阵计算以弧度为单位的地磁倾斜角。 registerListener(SensorListener listener, int sensors, int rate) 此方法为传感器注册一个侦听器 unregisterListener(SensorEventListener listener, Sensor sensor) 此方法为注册了该传感器的传感器注销一个侦听器。 getOrientation(float[] R, float[] values) 此方法根据旋转矩阵计算设备的方向。 getAltitude(float p0, float p) 此方法从大气压力和海平面压力计算以米为单位的海拔高度。 -
示例
本示例演示了进度对话框的旋转用法。按下按钮时将显示旋转进度对话框。 要尝试使用此示例,您需要在按照以下步骤开发应用程序后,在实际设备上运行此示例。- 您将使用Android Studio创建一个Android应用程序,并将其命名为Demo,位于com.jc2182.demo包下,如Hello World示例一章中所述。
- 修改src/MainActivity.java文件以添加必要的代码。
- 修改res/layout/activity_main以添加相应的XML组件。
- 运行该应用程序以启动Android模拟器并验证在该应用程序中所做更改的结果。
以下是修改后的主要活动文件src/com.jc2182.demo/MainActivity.java的内容。package com.jc2182.helloworld; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorManager; import android.os.Bundle; import android.view.View; import android.widget.TextView; import java.util.List; public class MainActivity extends Activity { TextView tv1=null; private SensorManager mSensorManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1 = (TextView) findViewById(R.id.textView2); tv1.setVisibility(View.GONE); mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); List mList= mSensorManager.getSensorList(Sensor.TYPE_ALL); for (int i = 1; i < mList.size(); i++) { tv1.setVisibility(View.VISIBLE); tv1.append("\n" + mList.get(i).getName() + "\n" + mList.get(i).getVendor() + "\n" + mList.get(i).getVersion()); } } }
以下是res/layout/activity_main.xml文件的内容-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:transitionGroup="true"> <TextView android:text="传感器 " android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview" android:textSize="35sp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="蝴蝶教程" android:id="@+id/textView" android:layout_below="@+id/textview" android:layout_centerHorizontal="true" android:textColor="#ff7aff24" android:textSize="35sp" /> <ImageView android:id="@+id/imageView" android:layout_width="248dp" android:layout_height="69dp" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:layout_marginTop="4dp" android:background="#223311" android:src="@drawable/logo" /> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/imageView" android:layout_alignParentStart="true" android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:layout_marginStart="0dp" android:layout_marginTop="21dp" android:text="New Text" /> </RelativeLayout>
让我们尝试运行刚刚修改的应用程序。我假设您在进行环境设置时已创建了AVD。要从Android Studio运行该应用,请打开您项目的活动文件之一,然后工具栏中单击“运行”图标。Android studio将应用程序安装在您的AVD上并启动它,如果设置和应用程序一切正常,它将显示在“模拟器”窗口下面-