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

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. hbase启动后HMaster几秒后死掉

    通过 http://s128:16010 无法访问Hbase Web端 查看master日志,有报错: 2019-08-30 16:27:35,137 ERROR [master/s128:16000 ...

  2. Asp.net4.5未在web服务器上注册

    在使用vs2012打开项目时,显示Asp.net4.5未在web服务器上注册?是由于没有下载一个补丁的原因,只需下载安装补丁 VS11-KB3002339.exe 下载地址:https://downl ...

  3. U盘重装系统

    一.准备工作 (1)8G以上空间的U盘一个: (2)将U盘制作好启动工具: 1.下载启动工具制作软件(常用的有:大白菜.电脑店.老毛桃.快启动等等一系列软件,直接百度这些软件的名称,或者百度U盘启动制 ...

  4. typeof,instanceof的区别,扩展知识:显示原型(prototype)与隐式类型(__protot__)

    3.typeof 和instanceof区别 1.typeof 主要用于判断对象类型 console.log(typeof null) //object console.log(typeof unde ...

  5. Java-日期格式转换

    1.日期-String类型转Date类型 // String转Date str = "2007-1-18"; DateFormat format1 = new SimpleDate ...

  6. 超详细思路讲解SQL语句的查询实现,及数据的创建。

    最近一直在看数据库方面的问题,总结了一下SQL语句,这是部分详细的SQL问题,思路讲解: 第一步:创建数据库表,及插入数据信息 --Student(S#,Sname,Sage,Ssex) 学生表 CR ...

  7. 关于windows下无法删除文件,需要TrueInstaller权限的问题

    笔者办公室的笔记本今天突然弹出来一个ie浏览器,这不是为了下载其他浏览器而存在的浏览器吗?现在还臭不要脸的弹出来,然鹅我在删除文件夹的时候,提示我无法删除,必须要有TrueInstaller的权限,那 ...

  8. Java事务(转载)

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 1.JDBC事务 JDBC 事务是用 Connection 对象控制的.JDBC Conne ...

  9. JS 深拷贝/合并

    var mix = function(r, s, ov) { if (!s || !r) return r; if (ov === undefined) ov = true; for (var p i ...

  10. 权限和ACL练习题

    1.在/testdir/dir里创建的新文件自动属于g1组,组 g2的成员如:alice能对这些新文件有读写权限,组g3 的成员如:tom只能对新文件有读权限,其它用户(不 属于g1,g2,g3)不能 ...