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

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. 区间前k小的和(权值线段树+离散化)--2019牛客多校第7场C--砍树

    题目链接:https://ac.nowcoder.com/acm/contest/887/C?&headNav=acm 题意: 给你 n 种树,有 高度,花费和数量 ,现在问你最少需要花多少钱 ...

  2. PHP,mysql,nginxunx中安装

    一:安装PHP,mysql,nginx linux装软件方式: 1.源码安装:下载wget-->解压tar -zxvf -->配置 ./configure --->编译make -- ...

  3. Java switch case 语句

    switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 语法 switch(expression){ case value : //语句 break; //可选 ca ...

  4. python_0基础开始_day12

    第十二节 一,生成器 生成器的核心:生成器的本质就是迭代器 迭代器是python自带的 生成器是程序员自己写的一种迭代器 在python中有三种方式来创建生成器: 基于函数编写 推导式方式编写 pyt ...

  5. Hive 教程(七)-DML基础

    DML,Hive Data Manipulation Language,数据操作语言: 通俗理解就是数据库里与数据的操作,如增删改查,统计汇总等: Loading files into tables ...

  6. MySQL 必备工具使用的6个锦囊妙计!

    这款工具是 MySQL 一个重要分支 percona 的,名称叫做 percona-toolkit(一把锋利的瑞士军刀),它呢是一组命令的集合.今儿给大家介绍几个我们在生产环境中最长用到的. 工具包的 ...

  7. vue路由守卫触发顺序

    不同组件之间的路由跳转流程图 导航被触发(A–>B) 调用A组件内路由守卫beforeRouteLeave(to,from,next) 调用全局路由前置守卫router.beforeEach(t ...

  8. jQuery 遍历 - 祖先

    通过 jQuery,您能够向上遍历 DOM 树,以查找元素的祖先. 向上遍历 DOM 树 这些 jQuery 方法很有用,它们用于向上遍历 DOM 树: parent() parents() pare ...

  9. [转] JAVA分为三个体系,JavaSE,JavaEE,JavaME(J2ME)的区别以及各个版

        Java SE(JavaPlatform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...

  10. easyui datagrid连续删除问题

    如果在datagrid中直接将index传给easyui自带的deletRow方法来删除当前点击行,一开始并没有问题,但是当连续删除的时候就或出问题了. 原因是datagrid行是根据datagrid ...