Android - Cảm biến
Hầu hết các thiết bị Android đều có cảm biến tích hợp để đo chuyển động, định hướng và điều kiện môi trường khác nhau. Nền tảng Android hỗ trợ ba loại cảm biến lớn.
- Cảm biến chuyển động
- Cảm biến môi trường
- Cảm biến vị trí
Một số cảm biến dựa trên phần cứng và một số là cảm biến dựa trên phần mềm. Bất kể cảm biến là gì, android cho phép chúng ta lấy dữ liệu thô từ các cảm biến này và sử dụng nó trong ứng dụng của mình. Đối với android này cung cấp cho chúng tôi một số lớp.
Android cung cấp các lớp SensorManager và Sensor để sử dụng các cảm biến trong ứng dụng của chúng tôi. Để sử dụng cảm biến, điều đầu tiên bạn cần làm là khởi tạo đối tượng của lớp SensorManager. Nó có thể đạt được như sau.
SensorManager sMgr;
sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
Điều tiếp theo bạn cần làm là khởi tạo đối tượng của lớp Sensor bằng cách gọi phương thức getDefaultSensor () của lớp SensorManager. Cú pháp của nó được đưa ra dưới đây:
Sensor light;
light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT);
Sau khi cảm biến đó được khai báo, bạn cần đăng ký bộ lắng nghe của nó và ghi đè hai phương thức là onAccuracyChanged và onSensorChanged. Cú pháp của nó như sau:
sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
}
Nhận danh sách các cảm biến được hỗ trợ
Bạn có thể nhận danh sách các cảm biến được thiết bị của mình hỗ trợ bằng cách gọi phương thức getSensorList, phương thức này sẽ trả về danh sách các cảm biến có chứa tên và số phiên bản của chúng và nhiều thông tin khác. Sau đó, bạn có thể lặp lại danh sách để lấy thông tin. Cú pháp của nó được đưa ra dưới đây:
sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
List<Sensor> list = sMgr.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: list){
}
Ngoài các phương pháp này, còn có các phương pháp khác được cung cấp bởi lớp SensorManager để quản lý khung cảm biến. Các phương pháp này được liệt kê bên dưới -
Sr.No | Phương pháp & mô tả |
---|---|
1 | getDefaultSensor(int type) Phương pháp này lấy cảm biến mặc định cho một loại nhất định. |
2 | getInclination(float[] I) Phương pháp này tính toán góc nghiêng địa từ tính bằng radian từ ma trận độ nghiêng. |
3 | registerListener(SensorListener listener, int sensors, int rate) Phương thức này đăng ký một bộ lắng nghe cho cảm biến |
4 | unregisterListener(SensorEventListener listener, Sensor sensor) Phương pháp này hủy đăng ký một bộ lắng nghe cho các cảm biến mà nó được đăng ký. |
5 | getOrientation(float[] R, float[] values) Phương pháp này tính toán hướng của thiết bị dựa trên ma trận xoay. |
6 | getAltitude(float p0, float p) Phương pháp này tính độ cao tính bằng mét từ áp suất khí quyển và áp suất ở mực nước biển. |
Thí dụ
Đây là một ví dụ minh họa việc sử dụng lớp SensorManager. Nó tạo ra một ứng dụng cơ bản cho phép bạn xem danh sách các cảm biến trên thiết bị của mình.
Để thử nghiệm với ví dụ này, bạn có thể chạy điều này trên thiết bị thực tế hoặc trong trình giả lập.
Các bước | Sự miêu tả |
---|---|
1 | Bạn sẽ sử dụng Android studio để tạo ứng dụng Android theo gói com.example.sairamkrishna.myapplication. |
2 | Sửa đổi tệp src / MainActivity.java để thêm mã cần thiết. |
3 | Sửa đổi res / layout / activity_main để thêm các thành phần XML tương ứng. |
4 | Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả. |
Sau đây là nội dung của bản sửa đổi MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import java.util.List;
import android.hardware.Sensor;
import android.hardware.SensorManager;
public class MainActivity extends Activity {
TextView tv1=null;
private SensorManager mSensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.textView2);
tv1.setVisibility(View.GONE);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> mList= mSensorManager.getSensorList(Sensor.TYPE_ALL);
for (int i = 1; i < mList.size(); i++) {
tv1.setVisibility(View.VISIBLE);
tv1.append("\n" + mList.get(i).getName() + "\n" + mList.get(i).getVendor() + "\n" + mList.get(i).getVersion());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Sau đây là nội dung sửa đổi của xml activity_main.xml.
Trong đoạn mã dưới đây abc cho biết về biểu trưng của tutorialspoint.com
<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:transitionGroup="true">
<TextView android:text="Sensor " android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview"
android:textSize="35dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:id="@+id/textView"
android:layout_below="@+id/textview"
android:layout_centerHorizontal="true"
android:textColor="#ff7aff24"
android:textSize="35dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/abc"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:theme="@style/Base.TextAppearance.AppCompat" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView2"
android:layout_below="@+id/imageView"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
Sau đây là nội dung của res/values/string.xml.
<resources>
<string name="app_name">My Application</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
</resources>
Sau đây là nội dung của AndroidManifest.xml tập tin.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Hãy thử chạy ứng dụng mà chúng tôi vừa sửa đổi. Tôi cho rằng bạn đã tạo raAVDtrong khi thiết lập môi trường. Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào
Bây giờ, nếu bạn nhìn vào màn hình thiết bị của mình, bạn sẽ thấy danh sách các cảm biến được thiết bị của bạn hỗ trợ cùng với tên và phiên bản của chúng và các thông tin khác.
Nếu bạn chạy ứng dụng này trên các thiết bị khác nhau, đầu ra sẽ khác nhau vì đầu ra phụ thuộc vào số lượng cảm biến được thiết bị của bạn hỗ trợ.