给我一个在Android上蜂鸣器和光电传感器的代码
时间: 2024-03-05 20:49:47 浏览: 97
以下是一个可以在 Android 上使用蜂鸣器和光电传感器的简单代码示例:
```java
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor lightSensor;
private TextView lightTextView;
private SoundPool soundPool;
private int soundId;
private boolean isPlaying = false;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取传感器管理器
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// 获取光电传感器
lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
// 获取 TextView
lightTextView = findViewById(R.id.light_text_view);
// 初始化 SoundPool
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
soundPool = new SoundPool.Builder()
.setMaxStreams(1)
.setAudioAttributes(attributes)
.build();
soundId = soundPool.load(this, R.raw.beep, 1);
// 初始化 Handler
handler = new Handler(Looper.getMainLooper());
}
@Override
protected void onResume() {
super.onResume();
// 注册光电传感器监听器
sensorManager.registerListener(this, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
// 取消注册光电传感器监听器
sensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor == lightSensor) {
// 获取光线强度
float lightValue = event.values[0];
// 更新 TextView 显示
lightTextView.setText("Light: " + lightValue);
// 如果光线强度低于某个阈值,播放蜂鸣声
if (lightValue < 10) {
if (!isPlaying) {
isPlaying = true;
soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f);
handler.postDelayed(new Runnable() {
@Override
public void run() {
isPlaying = false;
}
}, 1000);
}
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// 空实现
}
}
```
在这个示例代码中,我们使用了 Android 提供的 `SensorManager` 和 `Sensor` 类来获取和监听光电传感器的状态。当光线强度低于某个阈值时,我们使用 `SoundPool` 类播放一段蜂鸣声,并且在蜂鸣声播放完毕后等待一定时间才能再次播放。注意,在播放蜂鸣声时,我们使用了一个 `Handler` 来确保在 UI 线程上执行操作。同时也需要在 AndroidManifest.xml 文件中添加相应的权限。
阅读全文