Xử lý cảm biến trong Android(Kotlin)
Bài đăng này đã không được cập nhật trong 5 năm
Ta đều biết cảm biến là thiết bị phần cứng giúp điện thoại thông minh của ta thông minh hơn. Trong hướng dẫn này, ta sẽ xem cách thực hiện và sử dụng các loại cảm biến khác nhau được sử dụng trong điện thoại Android. Hiện nay, hầu hết các thiết bị chạy Android đều có cảm biến tích hợp để đo chuyển động, định hướng và các điều kiện môi trường khác nhau. Một số cảm biến được sử dụng:
- Proximity sensors- Tiết kiệm pin trong khi gọi
- Cảm biến nhiệt độ và độ ẩm được sử dụng để tính toán và báo cáo điểm sương
- Khi đi du lịch có thể dùng la bàn để xác định được định hướng . . . Bạn có thể xem thêm ở đây : https://developer.android.com/guide/topics/sensors
Ok bây giờ tiến hành ứng dụng sensor
Những sensor của máy bạn
Để liệt kê tất cả sensor của máy bạn:
class MainActivity : AppCompatActivity() {
private lateinit var mSensorManager: SensorManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Get an instance of the sensor service, and use that to get an instance of
// a particular sensor.
mSensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val deviceSensors: List<Sensor> = mSensorManager.getSensorList(Sensor.TYPE_ALL)
Log.v("Total sensors",""+deviceSensors.size)
deviceSensors.forEach{
Log.v("Sensor name",""+it)
}
}
}
## **Để kiếm tra liệu sensor có tồn tại trong thời gian chạy:**
class MainActivity : AppCompatActivity() {
private lateinit var mSensorManager: SensorManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mSensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
if (mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE) != null) {
// Success!
Log.v("success","yes")
} else {
// Failure!
Log.v("Failure","No sensor found")
}
}
}
Bạn có thể thay đổi tên sensor tùy thuộc vào yêu cầu của bạn: Giám sát sự kiện cảm biến: To monitor sensor events we need to implement tow callback methods exposed through SensorEventListener interface Để giám sát sự kiện sensor ta cần thêm 2 phương thức callback ở SensorEventListener Interface
- onAccuracyChanged() - Phát hiện độ chính xác cảm biến nó được đại diện bởi 4 hằng số:
* SENSOR_STATUS_ACCURACY_LOW
* SENSOR_STATUS_ACCURACY_MEDIUM
* SENSOR_STATUS_ACCURACY_HIGH
* SENSOR_STATUS_UNRELIABLE
2.onSensorChanged()- Bao gồm thông tin về dữ liệu sensor mới, bao gồm độ chính xác của dữ liệu, timestamp mà dữ liệu được tạo ra và những bản ghi của dữ liệu mới
class MainActivity : AppCompatActivity(), SensorEventListener {
private lateinit var mSensorManager: SensorManager
private var mSensors: Sensor? = null
override fun onAccuracyChanged(p0: Sensor?, p1: Int) {
}
override fun onSensorChanged(p0: SensorEvent?) {
// Sensor change value
val millibarsOfPressure = p0!!.values[0]
if (p0.sensor.type == Sensor.TYPE_LIGHT)
Toast.makeText(this, "" + millibarsOfPressure + " lx", Toast.LENGTH_SHORT).show()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mSensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
// Define the sensor
mSensors = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
}
override fun onResume() {
super.onResume()
// Register the sensor on resume of the activity
mSensorManager.registerListener(this, mSensors, SensorManager.SENSOR_DELAY_NORMAL)
}
override fun onPause() {
super.onPause()
// unregister the sensor onPause else it will be active even if the activity is closed
mSensorManager.unregisterListener(this)
}
}
Cảm ơn đã đọc Nguồn (https://developer.android.com/guide/topics/sensors/)
All rights reserved