Topik sensor (1) - pengenalan berkaitan


1. Pengenalan kepada penderia:

Bercakap tentang penderia, saya percaya semua orang sudah biasa dengannya, contohnya, WeChat’s goncangan menggunakan penderia pecutan; penderia

: Peranti fizikal atau organ biologi yang boleh mengesan dan merasakan isyarat luaran, keadaan fizikal (seperti cahaya, haba, Sederhana) atau komposisi kimia (seperti asap), dan hantarkan maklumat yang dikesan ke peranti atau organ lain!

Jenis penderia

: Penderia boleh dibahagikan dari sudut yang berbeza dan prinsip penukaran (fizik asas atau kimia operasi penderia Kesan); isyarat keluaran dan bahan dan proses pengeluaran, dsb. Secara amnya, mereka dibahagikan mengikut kerja mereka: sensor fizikal dan sensor kimia. Dua kategori! Telefon mudah alih pada asasnya dilengkapi dengan penderia fizikal Penderia yang dipasang pada telefon mudah alih termasuk yang berikut:

Penderia orientasi (Penderia orientasi)
  • Pecutan. Penderia pecutan
  • Penderia giroskop
  • Penderia medan magnet
  • Penderia jarak
  • Penderia cahaya
  • Penderia tekanan
  • Penderia suhu
  • Graviti penderia (diperkenalkan dalam Android 2.3)
  • Penderia pecutan linear (Penderia pecutan linear, diperkenalkan dalam Android 2.3)
  • Penderia vektor putaran (Vektor putaran penderia, Android 2.3)
  • Penderia Kelembapan Relatif (Penderia kelembapan relatif, Android 4.0)
  • Penderia komunikasi medan dekat (NFC) (diperkenalkan dalam Android 2.3), NFC berbeza daripada yang lain dan mempunyai fungsi membaca dan menulis.
  • Sudah tentu, sebagai tambahan kepada ini, terdapat yang lain seperti penderia kadar jantung, penderia langkah, penderia cap jari, dsb. Mengenai jenis penderia yang disokong oleh peranti Android, sila lihat dokumentasi rasmi:
  • Sensor
Bahagian ringkasan~

2. Bagaimana untuk menyemak penderia yang disokong oleh telefon anda?


Jenis penderia yang dinyatakan di atas pastinya tidak tersedia dalam semua telefon mudah alih Jenis penderia yang dipasang pada setiap telefon bimbit Dan nombornya mungkin berbeza Contohnya, jenis penderia yang disokong oleh Nexus 5 yang saya miliki ialah: Graviti, cahaya, jarak, tekanan udara dan giroskop! Anehnya, generasi kedua moto x mempunyai graviti, cahaya, Jarak dan sensor IR! Mengenai jenis penderia yang disokong oleh telefon mudah alih anda, anda boleh pergi ke ulasan yang berkaitan Tapak web seperti: Zhongguancun Mobile Online, Pacific, dsb., cari model anda sendiri dan lihat parameter yang berkaitan! Sudah tentu, kami juga boleh menulis kod kami sendiri untuk melihat jenis penderia yang disokong oleh telefon kami~

Contoh kod

:

Menjalankan pemaparan

:

1.gifPelaksanaan kod

:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/txt_show"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </ScrollView></RelativeLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private TextView txt_show;
    private SensorManager sm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        txt_show = (TextView) findViewById(R.id.txt_show);

        List allSensors = sm.getSensorList(Sensor.TYPE_ALL);
        StringBuilder sb = new StringBuilder();

        sb.append("此手机有" + allSensors.size() + "个传感器,分别有:\n\n");
        for(Sensor s:allSensors){
            switch (s.getType()){
                case Sensor.TYPE_ACCELEROMETER:
                    sb.append(s.getType() + " 加速度传感器(Accelerometer sensor)" + "\n");
                    break;
                case Sensor.TYPE_GYROSCOPE:
                    sb.append(s.getType() + " 陀螺仪传感器(Gyroscope sensor)" + "\n");
                    break;
                case Sensor.TYPE_LIGHT:
                    sb.append(s.getType() + " 光线传感器(Light sensor)" + "\n");
                    break;
                case Sensor.TYPE_MAGNETIC_FIELD:
                    sb.append(s.getType() + " 磁场传感器(Magnetic field sensor)" + "\n");
                    break;
                case Sensor.TYPE_ORIENTATION:
                    sb.append(s.getType() + " 方向传感器(Orientation sensor)" + "\n");
                    break;
                case Sensor.TYPE_PRESSURE:
                    sb.append(s.getType() + " 气压传感器(Pressure sensor)" + "\n");
                    break;
                case Sensor.TYPE_PROXIMITY:
                    sb.append(s.getType() + " 距离传感器(Proximity sensor)" + "\n");
                    break;
                case Sensor.TYPE_TEMPERATURE:
                    sb.append(s.getType() + " 温度传感器(Temperature sensor)" + "\n");
                    break;
                default:
                    sb.append(s.getType() + " 其他传感器" + "\n");
                    break;
            }
            sb.append("设备名称:" + s.getName() + "\n 设备版本:" + s.getVersion() + "\n 供应商:"
                    + s.getVendor() + "\n\n");
        }
        txt_show.setText(sb.toString());
    }
}

3

Daripada contoh dalam 2, kita boleh merumuskan secara kasar cara mendapatkan sensor Sensor dan mendapatkan beberapa maklumat yang berkaitan dengan sensor. Prosesnya adalah seperti berikut:

1) Kaedah berkaitan sensor sensor

Langkah 1: Dapatkan pengurus sensor :

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
  • Langkah 2: Dapatkan senarai objek penderia peranti :
List allSensors = sm.getSensorList(Sensor.TYPE_ALL);
  • Langkah 3: Dapatkan objek Sensor secara berulang, dan kemudian panggil yang sepadan kaedah untuk mendapatkan maklumat berkaitan penderia:
for(Sensor s:allSensors){
    sensor.getName();   //获得传感器名称
    sensor.getType();     //获得传感器种类
    sensor.getVendor();    //获得传感器供应商
    sensor.getVersion();    //获得传感器版本
    sensor.getResolution();  //获得精度值
    sensor.getMaximumRange(); //获得最大范围
    sensor.getPower();        //传感器使用时的耗电量 
}

2) Rutin penggunaan penderia

Secara amnya, kami jarang mengatakan untuk mendapatkan Sensor secara terus dan kemudian mendapatkan maklumat di atas! Kerana ia bukan apa-apa Peranan terbesar adalah untuk mendapatkan data yang dikumpul oleh sensor dengan lebih kerap, seperti mendapatkan tekanan atmosfera semasa. Atau nilai tiga sudut penderia arah, atau nilai giroskop, dan kebanyakan pengumpulan data penderia adalah Rutin berikut:

~Langkah 1: Dapatkan pengurus penderia:

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);

~Langkah 2: Panggil kaedah khusus untuk mendapatkan penderia yang diperlukan: < . Antara muka SensorEventListener dan tulis semula kaedah onSensorChanged dan onAccuracyChanged!

onSensorChanged

: Akan dipanggil semula apabila nilai sensor berubah

onAccuracyChanged

: Akan dipanggil semula apabila kemajuan penderia berubah

Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
Kami biasanya memperoleh data penderia daripada SensorEvent ini Terdapat

pembolehubah nilai

dalam kelas ini. Jenisnya ialah Apung[] Pembolehubah

mempunyai paling banyak tiga elemen

dan penderia berbeza mempunyai makna berbeza yang diwakili oleh unsur yang sepadan. Sebagai contoh, elemen pertama dalam penderia arah ialah nilai sudut azimut, manakala nilai pertama dalam penderia tekanan udara ialah nilai tekanan udara! ~Langkah 4: Objek SensorManager memanggil registerListener untuk mendaftarkan pendengar:

@Override
public void onSensorChanged(SensorEvent event) {
    final float[] _Data = event.values;
   this.mService.onSensorChanged(_Data[0],_Data[1],_Data[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
Kaedahnya juga sangat mudah, dan parameter yang sepadan ialah:

Konteks objek

,Objek sensor sensor, Dan

ketumpatan ketepatan masa tunda sensor

, terdapat empat nilai pilihan: SENSOR_DELAY_FASTEST - Kelewatan: 0ms

    < .
  • SENSOR_DELAY_NORMAL——Lengah: 200ms
  • Sudah tentu, kelewatan yang rendah bermakna pemeriksaan kenderaan yang lebih kerap, jika tidak disyorkan untuk memerlukan sangat ketepatan yang tinggi Jangan gunakan yang terlalu berketepatan tinggi Secara umumnya, gunakan yang ketiga lagi~Ukur sendiri~~Langkah 5: Nyahdaftar pendengar:
  • Habis Katakan sahaja, ia adalah tabiat yang baik, secara amnya kita boleh menuliskannya ke dalam kaedah pemusnahan Aktiviti atau Perkhidmatan:
    ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);

    Baiklah, rutinnya sangat mudah~


    4 Muat turun kod contoh untuk bahagian ini:

    SensorDemo1.zip

    <. 🎜>
    Ringkasan bahagian ini:

    Baiklah, bahagian ini akan memperkenalkan anda kepada penderia dalam Android dan cara memahami penderia yang disokong oleh telefon anda. Selain mencari dalam talian, anda juga boleh menulis kod anda sendiri untuk menguji Kemudian ia juga menerangkan kaedah dan proses mendapatkan maklumat berkaitan sensor. Ia juga menerangkan rutin untuk mengumpul data penderia Kemudian kami akan menganalisis penggunaan beberapa penderia yang biasa digunakan, jadi nantikan~

    2.jpg