传感器是一种检测装置,能够感受被测量的信息,并能将检测和感受到的信息按一定规律变换成电信号或其它所需形式的信息输出

Android操作系统中内置了很多的传感器(物理装置),能够探测、感受外界的信号、物理条件,并将得到的信息传递给其它的装置。

例如在部分游戏或软件可以自动识别屏幕的横竖屏来改变屏幕显示的布局

下面是Android支持的几种传感器:

加速传感器       Sensor.TYPE_ACCELEROMETER
陀螺仪传感器      Sensor.TYPE_GYROSCOPE
环境光仪传感器     Sensor.TYPE_LIGHT
电磁场传感器      Sensor.TYPE_MAGNETIC_FIELD
方向传感器       Sensor.TYPE_ORIENTATION:
压力传感器       Sensor.TYPE_PRESSURE:
距离传感器       Sensor.TYPE_PROXIMITY:
温度传感器       Sensor.TYPE_TEMPERATURE:
 
 

运行截图:

程序结构:

 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.example.asus.gary_01.MainActivity"> <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="传感器操作!"
android:textSize="10pt" /> <Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取手机传感器信息"/> <TextView
android:id="@+id/textView"
android:scrollbars="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="8pt"/>
</LinearLayout>

activity_main


package com.example.asus.gary_01;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import java.util.List; public class MainActivity extends AppCompatActivity { private TextView tx1; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt1 = (Button)findViewById(R.id.button);
tx1=(TextView)findViewById(R.id.textView);
//从系统获得传感器管理器
final SensorManager sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str;
//从传感器管理器中获得全部的传感器列表
List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
int i;
//给ViewText添加滚动条
tx1.setMovementMethod(ScrollingMovementMethod.getInstance());
//显示有多少个传感器
tx1.setText("经检测该手机有"+allSensors.size()+"个传感器,它们分别是:");
Sensor s;
//显示每个传感器的具体信息
for(i=0;i<allSensors.size();i++)
{
s=allSensors.get(i);
str="设备名称:"+s.getName();
switch(s.getType())
{
//加速传感器 Sensor.TYPE_ACCELEROMETER
case Sensor.TYPE_ACCELEROMETER:
tx1.setText(tx1.getText()+"\n"+i+"加速传感器accelerometer:\n"+str);
break;
//陀螺仪传感器 Sensor.TYPE_GYROSCOPE
case Sensor.TYPE_GYROSCOPE:
tx1.setText(tx1.getText()+"\n"+i+"陀螺仪传感器gyroscope:\n"+str);
break;
//环境光仪传感器 Sensor.TYPE_LIGHT
case Sensor.TYPE_LIGHT:
tx1.setText(tx1.getText()+"\n"+i+"环境光仪传感器light:\n"+str);
break;
//电磁场传感器 Sensor.TYPE_MAGNETIC_FIELD
case Sensor.TYPE_MAGNETIC_FIELD:
tx1.setText(tx1.getText()+"\n"+i+"电磁场传感器magnetic:\n"+str);
break;
//方向传感器 Sensor.TYPE_ORIENTATION:
case Sensor.TYPE_ORIENTATION:
tx1.setText(tx1.getText()+"\n"+i+"方向传感器orientation:\n"+str);
break;
//压力传感器 Sensor.TYPE_PRESSURE:
case Sensor.TYPE_PRESSURE:
tx1.setText(tx1.getText()+"\n"+i+"压力传感器pressure:\n"+str);
break;
//距离传感器 Sensor.TYPE_PROXIMITY:
case Sensor.TYPE_PROXIMITY:
tx1.setText(tx1.getText()+"\n"+i+"距离传感器proximity:\n"+str);
break;
//温度传感器 Sensor.TYPE_TEMPERATURE:
case Sensor.TYPE_TEMPERATURE:
tx1.setText(tx1.getText()+"\n"+i+"温度传感器temperature:\n"+str);
break; default:
tx1.setText(tx1.getText()+"\n"+i+"未知传感器:\n"+str);
break;
}
}
}
});
}
}

MainActivity

一、界面布局

  两个TextView,一个Button,下方的TextView支持滚动操作

  点击Button,获得手机传感器并显示在下方TextView上

  给textview添加滚动条:传送门

  xml代码:

  //设置滚动条的方向

  android:scrollbars="vertical"

  java中设置

  tx1=(TextView) findViewById(R.id.tv1);

  //设置滚动方式
  tx1.setMovementMethod(ScrollingMovementMethod.getInstance());

二、实现程序

//从系统获得传感器管理器
final SensorManager sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//从传感器管理器中获得全部的传感器列表
List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str;
//从传感器管理器中获得全部的传感器列表
List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
int i;
//给ViewText添加滚动条
tx1.setMovementMethod(ScrollingMovementMethod.getInstance());
//显示有多少个传感器
tx1.setText("经检测该手机有"+allSensors.size()+"个传感器,它们分别是:");
Sensor s;
//显示每个传感器的具体信息
for(i=0;i<allSensors.size();i++)
{
s=allSensors.get(i);
str="设备名称:"+s.getName();
switch(s.getType())
{
//加速传感器 Sensor.TYPE_ACCELEROMETER
case Sensor.TYPE_ACCELEROMETER:
tx1.setText(tx1.getText()+"\n"+i+"加速传感器accelerometer:\n"+str);
break;
//陀螺仪传感器 Sensor.TYPE_GYROSCOPE
case Sensor.TYPE_GYROSCOPE:
tx1.setText(tx1.getText()+"\n"+i+"陀螺仪传感器gyroscope:\n"+str);
break;
//环境光仪传感器 Sensor.TYPE_LIGHT
case Sensor.TYPE_LIGHT:
tx1.setText(tx1.getText()+"\n"+i+"环境光仪传感器light:\n"+str);
break;
//电磁场传感器 Sensor.TYPE_MAGNETIC_FIELD
case Sensor.TYPE_MAGNETIC_FIELD:
tx1.setText(tx1.getText()+"\n"+i+"电磁场传感器magnetic:\n"+str);
break;
//方向传感器 Sensor.TYPE_ORIENTATION:
case Sensor.TYPE_ORIENTATION:
tx1.setText(tx1.getText()+"\n"+i+"方向传感器orientation:\n"+str);
break;
//压力传感器 Sensor.TYPE_PRESSURE:
case Sensor.TYPE_PRESSURE:
tx1.setText(tx1.getText()+"\n"+i+"压力传感器pressure:\n"+str);
break;
//距离传感器 Sensor.TYPE_PROXIMITY:
case Sensor.TYPE_PROXIMITY:
tx1.setText(tx1.getText()+"\n"+i+"距离传感器proximity:\n"+str);
break;
//温度传感器 Sensor.TYPE_TEMPERATURE:
case Sensor.TYPE_TEMPERATURE:
tx1.setText(tx1.getText()+"\n"+i+"温度传感器temperature:\n"+str);
break; default:
tx1.setText(tx1.getText()+"\n"+i+"未知传感器:\n"+str);
break;
}
}
}
});
 

Android_(传感器)获取手机中的传感器的更多相关文章

  1. 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

    众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManag ...

  2. Android_(自动化)获取手机存储卡的容量

    手机上的存储卡是可以随时插拔的,每次插拔时会像操作系统总发送Action广播事件. 使用StatFs文件系统来获取MicroSD存储卡的剩余容量,在使用前先判断是否插入了存储卡,如果不存在则不于计算 ...

  3. iOS - 获取手机中所有图片

    1 #import <AssetsLibrary/AssetsLibrary.h> /** 6 * ALAssetsLibrary.h 代表资源库(所有的视频,照片) 7 ALAssets ...

  4. 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

    众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下: PackageManager packageManager = this.getPackageMana ...

  5. 获取应用版本号,版本名称,包名,AppName,图标,是否是系统应用,获取手机中所有应用,所有进程

    PackageManager packageManager = getPackageManager(); PackageInfo packageInfo; = packageManager.getPa ...

  6. Android利用方向传感器获得手机的相对角度实例说明

    http://www.jb51.net/article/37710.htm 1.android 的坐标系是如何定义x, y z 轴的 x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较 ...

  7. Android之——获取手机安装的应用程序

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47114331 前几篇有关Android的博文中.向大家介绍了几个项目中经常使用的有 ...

  8. Android 获取手机的厂商、型号、Android系统版本号等工具类(转载)

    Android 获取手机的厂商.型号.Android系统版本号等工具类 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串 ...

  9. Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类

    最近在开发中,需要用到一些系统信息,这里我把这些方法写成一个工具类方便以后复用,该工具类有以下6个功能: 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android ...

随机推荐

  1. Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法

    记录瞬间 近段时间使用Springboot实现了文件的上传服务,但是在使用python的requests进行post上传时,总是报错. 比如: 1.Current request is not a m ...

  2. volatile关键字和transient关键字

    Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量 1.volatile 关键字-----针对变量的可变性 专业解释:volatile关键字是个类型修饰符用它声明的类型变 ...

  3. EBS描述性弹性域及键弹性域总结

    一.描述性弹性域 前言介绍: 描述性弹性域的实质就是系统预留自定字段,系统可以使用说明性弹性域来获取业务所特有的重要附加信息.系统可能自定义说明性弹性域,以显示存储更多信息的字段,提供一套完整的“自定 ...

  4. C# using用法之一(命名空间相关)

    通过using关键字可以引入命名空间 using System; using System.Collections.Generic; using System.Linq; using System.T ...

  5. Cocoapods私有库

    http://www.jianshu.com/p/d6a592d6fced 1.创建两个什么都不选的远程仓库:(私有公有都可,ReadMe\ignore都不选),一个放代码,一个放源(*.podspe ...

  6. 使用TensorFlow玩GTA5

    小白学TensorFlow(一) tensorflow安装 在安装之前,您必须选择以下类型的TensorFlow之一来安装: TensorFlow仅支持CPU支​​持.如果您的系统没有NVIDIA®G ...

  7. io:轻松地创建缓存

    介绍 io模块是python中专门用来进行流处理的模块 StringIO 提供字符串形式的缓存,可以不断地往里面写入数据,最后一次性读出 import io # 创建相应的缓存 buf = io.St ...

  8. php获取当前网页地址

    判断是否为https /** * 判断是否为https * @return bool 是https返回true;否则返回false */ function is_https() { if ( !emp ...

  9. 第01章 重置 root 管理员密码

    确定是否为 RHEL 7 系统 重启 Linux 系统主机并出现引导界面时,按下键盘上的 e 键进入内核编辑界面,如图 146 所示.   在 linux16 参数这行的最后面追加“rd.break” ...

  10. vi 必须要学会的技能

    vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对 ...