센서 주제(1) - 관련 소개
1. 센서 소개:
센서에 대해 말하자면, 예를 들어 WeChat의 흔들림은 가속도 센서를 사용합니다.
센서의 정의: 감지할 수 있는 장치입니다. 외부 신호, 물리적 조건(예: 빛, 열, 보통) 또는 화학적 조성(연기 등)을 분석하고 감지된 정보를 다른 장치나 기관으로 전송합니다!
센서 유형: 센서는 다양한 각도로 나눌 수 있으며 변환 원리(센서 작동의 기본 물리학 또는 화학) 효과), 출력 신호 및 생산 재료 및 프로세스 등 일반적으로 작업에 따라 물리적 센서와 화학적 센서로 구분됩니다. 두 가지 카테고리! 휴대폰에는 기본적으로 물리적 센서가 장착되어 있습니다.
- 방향 센서
- 가속도계 센서
- 자이로스코프 센서 )
- 자기장 센서
- 근접성 센서
- 조명 센서
- 압력 센서
- 온도 센서 센서)
- 중력 센서(중력 센서, Android 2.3에 도입됨)
- 선형 가속도 센서(선형 가속도 센서, 도입됨) 안으로 안드로이드 2.3)
- 회전 벡터 센서(회전 벡터 센서, 안드로이드 2.3)
- 상대습도 센서(안드로이드 4.0)
- NFC(Near Field Communication) 센서(안드로이드 2.3에서 도입), NFC는 다르다 다른 사람으로부터 읽고 쓰기 기능을 가지고 있습니다.
물론 이 외에도 심박수 센서, 보행 센서, 지문 센서 등이 있습니다. Android 기기에서 지원하는 센서 유형에 대해서는 공식 문서를 참조하세요. Sensor 요약 섹션~
2. 휴대전화에서 지원되는 센서를 확인하는 방법은 무엇인가요?
위에서 언급한 유형은 모든 휴대전화에서 사용할 수 있는 것은 아닙니다. 각 휴대전화에 설치된 센서의 유형은 다릅니다. 예를 들어 내가 가지고 있는 Nexus 5에서 지원하는 센서 유형은 다음과 같습니다. 중력, 빛, 거리, 기압, 자이로스코프! 놀랍게도 2세대 모토엑스는 중력과 빛, 거리 및 IR 센서! 휴대폰에서 지원하는 센서 유형에 대해서는 관련 리뷰를 참조하세요. Zhongguancun Mobile Online, Pacific 등과 같은 웹사이트에서 자신의 모델을 검색하고 관련 매개변수를 확인하세요! 물론, 우리 휴대폰이 어떤 센서 유형을 지원하는지 알아보기 위해 자체 코드를 작성할 수도 있습니다~
코드 예:
렌더링 실행:
코드 구현:
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. 센서 센서 관련 방법 및 사용 루틴
2의 예에서 센서 센서를 얻는 방법과 센서 관련 정보. 프로세스는 다음과 같습니다.
1) 센서 관련 방법
1단계: 센서 관리자 가져오기 :
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
- 2단계: 장치의 센서 개체 목록 가져오기 :
List allSensors = sm.getSensorList(Sensor.TYPE_ALL);
- 3단계 : 반복적으로 Sensor 객체를 얻은 후 해당 메소드를 호출하여 센서 관련 정보를 얻습니다.
for(Sensor s:allSensors){ sensor.getName(); //获得传感器名称 sensor.getType(); //获得传感器种类 sensor.getVendor(); //获得传感器供应商 sensor.getVersion(); //获得传感器版本 sensor.getResolution(); //获得精度值 sensor.getMaximumRange(); //获得最大范围 sensor.getPower(); //传感器使用时的耗电量 }
2) 센서 사용 루틴
일반적으로 Sensor를 직접 얻은 다음 얻는다는 말은 거의 없습니다. 위의 정보! 아무것도 아니니까 가장 중요한 것은 현재 대기압을 얻는 등 센서가 수집하는 데이터를 얻는 것입니다. 혹은 방향센서의 세 각도의 값이나 자이로스코프의 값 등을 사용하며, 센서 데이터 수집의 대부분은 루틴은 다음과 같습니다.
~1단계: 센서 관리자 가져오기:
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
~2단계: 필요한 센서를 가져오기 위한 특정 메서드 호출:
예를 들어 여기서 얻는 것은 방향 센서입니다. , 어떤 센서를 얻으시겠습니까? API를 확인하세요~:
Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
~3단계: SensorEventListener 인터페이스를 구현하고 onSensorChanged 및 onAccuracyChanged 메서드를 다시 작성하세요!
onSensorChanged: 센서 값이 변경되면 다시 호출됩니다.
onAccuracyChanged: 센서 진행 상황이 변경되면 다시 호출됩니다.
@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) { }
센서 데이터를 얻는 일반적인 소스는 다음과 같습니다. 이 클래스에는 SensorEvent가 하나 있습니다 값의 변수 , 유형은 Float[]입니다. 이 변수 에는 최대 3개의 요소 가 있으며 센서마다 해당 요소가 나타내는 의미가 다릅니다. 예를 들어 방향 센서의 첫 번째 요소는 방위각 값이고, 기압 센서의 첫 번째 값은 기압 값입니다.
~4단계: SensorManager 개체는 RegisterListener를 호출하여 리스너를 등록합니다.
ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);
메서드도 매우 간단하며 해당 매개변수는 Context 개체, Sensor 센서 개체, 센서 지연 시간의 정확도 밀도 외에도 4가지 선택 값이 있습니다:
- SENSOR_DELAY_FASTEST——Delay: 0ms
- SENSOR_DELAY_GAME——Delay: 20ms
- SENS OR_DELAY_UI ——Delay: 60ms
- SENSOR_DELAY_NORMAL——Delay: 200ms
물론, 지연이 적다는 것은 차량 점검이 더 잦다는 것을 의미하며, 정확성이 요구되지 않으면 전력 소모도 더 많다는 것을 의미합니다. 매우 높음 추천 너무 정밀도가 높은 것은 사용하지 마세요. 일반적으로 세 번째를 더 사용하세요~직접 측정해 보세요~
~5단계: 리스너 등록 해제:
사용 후 해제하는 것이 좋습니다. 일반적으로 활동이나 서비스의 파기 방법에 다음과 같이 쓸 수 있습니다.
ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);
알겠습니다. 루틴은 매우 간단합니다~
4. 이 섹션의 샘플 코드를 다운로드하세요.
이 섹션의 요약:
좋아, 이 섹션에서는 Android에 대해 설명합니다. 센서 소개 및 휴대폰에서 지원하는 센서를 이해하는 방법, 온라인 검색 외에도 테스트할 코드를 직접 작성할 수도 있습니다. 그런 다음 센서 관련 정보를 얻는 방법과 프로세스도 설명합니다. 센서 데이터를 수집하는 루틴에 대해서도 설명했습니다. 나중에 일반적으로 사용되는 일부 센서의 사용법을 분석할 예정이니 계속 지켜봐주세요~