您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
android开发笔记之高级主题—传感器的简单应用
 
作者:TheMrNice 来源:博客 发布于: 2016-6-22
  1719  次浏览      15
 

效果:

初始界面:

当摇晃到一定程度的时候就跳转到播放音乐界面并播放音乐

步骤:

①获得传感器服务

SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

②获得加速度传感器并注册监听器

sm.registerListener(this, 
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
sensorManager.SENSOR_DELAY_UI)

③在onSensorChanged(SensorEvent event)方法中实现摇一摇听音乐的逻辑(其实逻辑很简单,只需要判断当摇晃到一定程度的时候就播放音乐,不过应该在音乐没播放完之前摇晃是没效果,做到这个之需要加个标志位)

   float x = arg0.values[0];
float y = arg0.values[1];
float z = arg0.values[2];
if ((Math.abs(x)+Math.abs(y)+Math.abs(z)) >= RING_VALUE && flag == false) {
//是否正在播放音乐的标志
flag = true;
//播放音乐界面
tv_start.setVisibility(View.VISIBLE);
//播放音乐的
MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.houge);
//开始播放音乐
player.start();
//监听该首歌有没有播放完
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
arg0.release();
flag = false;
tv_start.setVisibility(View.GONE);
}
});
}

核心代码:

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" >
<!-- 初始界面 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2B2C30"
android:gravity="center" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#2B2C30"
android:drawableTop="@drawable/ring"
android:gravity="center"
android:text="摇一摇听音乐"
android:textColor="#FEFFFF"
android:textSize="30sp" />
</LinearLayout>
<!-- 播放音乐界面 -->
<TextView
android:id="@+id/tv_start"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_bright"
android:gravity="center"
android:text="开始啦"
android:textSize="70sp"
android:visibility="gone" />
<!-- 温度 -->
<TextView
android:textSize="17sp"
android:id="@+id/tv_temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="温度:25°C" />

</RelativeLayout>

MainActivity.Java

public class MainActivity extends Activity {

private TextView tv_start;
private TextView tv_temp;
public static int RING_VALUE = 40;//三维xyz三个值总和达到这个值表示摇晃
boolean flag = false; //表示是否在播放音乐
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_start = (TextView) findViewById(R.id.tv_start);
tv_temp = (TextView) findViewById(R.id.tv_temp);

//获取系统传感器管理器
SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//获取指定的一个传感器(加速度传感器)
Sensor accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//注册传感器的监听器
sm.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent arg0) {
//传感器数据变化,在该方法中我们可以获取传感器变化的值
float x = arg0.values[0];
float y = arg0.values[1];
float z = arg0.values[2];
if ((Math.abs(x)+Math.abs(y)+Math.abs(z)) >= RING_VALUE && flag == false) {
//是否正在播放音乐的标志
flag = true;
//播放音乐界面
tv_start.setVisibility(View.VISIBLE);
//播放音乐的
MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.houge);
//开始播放音乐
player.start();
//监听该首歌有没有播放完
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
arg0.release();
flag = false;
tv_start.setVisibility(View.GONE);
}
});
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
//传感器精度的变化
}
}, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);

//获取温度传感器
Sensor temperature = sm.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
sm.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent arg0) {
float temp = arg0.values[0];
temp = (float) (Math.round(temp *10.0)/10.0);
tv_temp.setText("温度:"+temp+"°C");
}

@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {

}
}, temperature, SensorManager.SENSOR_DELAY_NORMAL);
}
}

使用起来是不是很方便呢,赶紧试试吧!

   
1719 次浏览       15
 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...