传感器

大约 4 分钟

传感器

大多数android设备都有内置的传感器,可以测量运动,方向和各种环境条件。android平台支持三大类传感器。

  • 运动传感器

  • 环境传感器

  • 位置传感器

    有些传感器是基于硬件的传感器,有些是基于软件的传感器。无论传感器是什么,android都允许我们从这些传感器获取原始数据,并将其用于我们的应用程序中。为此,android为我们提供了一些类。

    Android提供了SensorManagerSensor类,以在我们的应用程序中使用传感器。为了使用传感器,您需要做的第一件事是实例化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)此方法从大气压力和海平面压力计算以米为单位的海拔高度。

示例

本示例演示了进度对话框的旋转用法。按下按钮时将显示旋转进度对话框。 要尝试使用此示例,您需要在按照以下步骤开发应用程序后,在实际设备上运行此示例。

  1. 您将使用Android Studio创建一个Android应用程序,并将其命名为Demo,位于com.jc2182.demo包下,如Hello World示例open in new window一章中所述。
  2. 修改src/MainActivity.java文件以添加必要的代码。
  3. 修改res/layout/activity_main以添加相应的XML组件。
  4. 运行该应用程序以启动Android模拟器并验证在该应用程序中所做更改的结果。

以下是修改后的主要活动文件src/com.jc2182.demo/MainActivity.java的内容。

  

  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上并启动它,如果设置和应用程序一切正常,它将显示在“模拟器”窗口下面-