1. 程式人生 > >溫度傳感器,搖一搖

溫度傳感器,搖一搖

math span cti 四舍五入 nag 精度 sorl ner support

權限: <uses-permission android:name="android.permission.VIBRATE" />



布局:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.my_chuanganqi_yaoyiyao.MainActivity">

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />

<TextView
android:id="@+id/tv_1"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="搖一搖\n開始啦~\\(≧▽≦)/~"
android:gravity="center"
android:textSize="40sp"
android:textColor="#ffffff"
android:background="#000000"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />

<TextView
android:id="@+id/tv_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="溫度"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="100dp" />
</RelativeLayout>








package com.example.my_chuanganqi_yaoyiyao;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {

private TextView tv;
private TextView tv_1; // 顯示搖一搖
private TextView tv_2; // 顯示溫度

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.tv);
tv_1 = (TextView) findViewById(R.id.tv_1); // 顯示搖一搖
tv_2 = (TextView) findViewById(R.id.tv_2); // 顯示溫度

// 獲取 系統傳感器管理器
SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 通過傳感器管理器 獲取 本地所有的傳感器
List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ALL);

for (Sensor s: sensors) {
System.out.println("Sensor == " + s.toString());
}

// 獲取指定的某一個傳感器
Sensor type_accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (type_accelerometer!=null) {
System.out.println("Sensor 獲取指定的某一個傳感器 " + type_accelerometer.toString());
}

// 註冊傳感器的監聽器 (搖一搖)
sm.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
// 傳感器數據變化,在該方法中我們可以獲取傳感器變化的值
float x = sensorEvent.values[0];
float y = sensorEvent.values[1];
float z = sensorEvent.values[2];
tv.setText("x="+x+",y="+y+",z="+z);

if (Math.abs(x)+Math.abs(y)+Math.abs(z)>=ringValue && flag == false){
flag = true;
tv_1.setVisibility(View.VISIBLE);
MediaPlayer mp = MediaPlayer.create(MainActivity.this,R.raw.yaoyiyao);
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
flag = false;
MediaPlayer.create(MainActivity.this,R.raw.yaodaole).start();
tv_1.setVisibility(View.GONE);
}
});
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
// 傳感器精度的變化
}
},type_accelerometer,SensorManager.SENSOR_DELAY_NORMAL);



// 溫度傳感器
Sensor type_ambient_temperature = sm.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
System.out.println(type_ambient_temperature);
sm.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float temp = sensorEvent.values[0];
System.out.println(sensorEvent.values[0]); System.out.println(sensorEvent.values[1]); System.out.println(sensorEvent.values[2]); temp = (float) (Math.round(temp * 10.0) / 10.0); // 四舍五入 保留一位小數 tv_2.setText("溫度:" + temp + "°C"); } @Override public void onAccuracyChanged(Sensor sensor, int i) { System.out.println(sensor); System.out.println(i); } },type_ambient_temperature, SensorManager.SENSOR_DELAY_NORMAL); } int ringValue = 40; boolean flag = false;}

溫度傳感器,搖一搖