머리말
WeChat이 인기를 얻었을 때, 내가 여전히 사용될 수 있었을 때, 나는 또한 한밤중에 전화를 걸었습니다. 그 당시 내가 가장 많이 생각한 것은 그 당시에는 Shenma에게 너무 많이 흔들리는 것이었다. 나는 그것이 개인적인 디자인이라고 생각했다. 너무 높습니다. 많은 후에, 나는 최근 프로젝트에서 진동 문제를 해결해야한다.
원칙
기능을 흔드는 기본 원리는 휴대 전화의 가속 센서를 사용하여 가속이 휴대 전화 진동 및 UI 변경과 같은 특정 값에 도달 할 때 특정 값에 도달하는 것입니다. 우선이 기능을 구현하려면 Android 센서의 사용을 이해해야합니다.
안드로이드 센서 센서 사용
현재 Android에는 다양한 센서가 있으며 Android SDK가 지원하는 센서에는 가속 센서, 라이트 센서, 자이로 스코프 센서, 중력 센서, 방향 센서, 자기장 센서, 압력 센서 등이 포함됩니다. 그러나 센서에 돈이 필요하기 때문에 모든 휴대 전화에 이러한 센서가있는 것은 아니므로 저렴한 휴대폰은 일반적으로 사용되는 센서를 추가하여 추가 할 수 있으며 일부 고급 모델은 기본적으로 대부분의 센서를 갖습니다.
센서 사용 단계
안드로이드 센서의 사용 단계는 대략 세 단계로 나눌 수 있습니다.
1. 센서 관리 서비스 객체 SensorManager를 가져옵니다.
2. Android.hardware.sensoreventListener 인터페이스를 구현 해야하는 센서 이벤트 모니터링 클래스를 만듭니다.
3. Sensormanager.registerListener 메소드를 사용하여 지정된 센서를 등록하십시오.
센서 이벤트 인터페이스
SensoreVentListener 인터페이스, OnSensorChanged () 및 OnAccuracyChanged ()가 해당 센서 이벤트를 처리합니다.
Public Interface SensoreventListener { /** * 센서 값이 변경 될 때 {@link andsormanager sensormanager} s를 참조하십시오 } interung의 일부가 될 수 있습니다 P>이 센서의 @param 계정 계정 */ public void onaccuracyChanged (센서 센서, int accuracy);
안드로이드 진동 구현
안드로이드 진동 효과는 주로 진동기 서비스에 의존합니다.
android.app.Activity android. vibrator_service);} public static vibrate (최종 조치 활동, long [] 패턴) {vibrator ator = (vibrator) action .getsystemservice (service.vibrator_service); ? 1 : -1);}}
동시에 AndroidManifest.xml에 진동 권한을 추가해야합니다.
<용도로 제공 안드로이드 : 이름 = "android.permission.vibrate"/>
진동 방법의 매개 변수를 설명하십시오.
1. 긴 밀리 초 : 진동의 길이, 단위는 밀리 초입니다.
2. Long [] 패턴 : 사용자 정의 진동 모드. 배열의 숫자의 의미는 [정적 지속 시간, 진동 지속 시간, 정적 시간, 진동 시간, ...]입니다. 진동 시간이있는 장치는 밀리 초입니다.
3. 반복 : 진동을 반복할지 여부, 1은 반복되고 -1은 한 번만 진동입니다.
진동 데모 실현을 흔들립니다
가속도 센서를 사용하여 진동 센서를 사용해야한다는 것을 이해해야합니다. 그러면 코드를 직접 작성할 수 있습니다. Mainactivity 클래스는 다음과 같이 구현됩니다.
android.Apt.Apt.ContRod.DialoGinterface; Hardware.Sensortware.Sensormanager; 개인 부울 isrefresh = @override void oncreate = new shakesensorlistener (); int) {isrefresh = false.cancel (); ") .create ();}} @override protected void void onresume () {sensormanager.registerListener (shakelistener, sensormanager.getDefaultsor (sensor.type_accelerometer), s ensonager.sensor_delay_fastest); super.onresume (); onpause () {// 배경에서 감옥을 취소하고 감옥을 듣습니다 onsensorchnted (sensorevent) {// log ( "zhengyi.wzy", " + event.sensor.gettype ()); (isrefresh) {return;} float []] value = event.values; 축 방향의 중력 가속도는 전방 x = math.abs (value [1]); [2]); log.e ( "zhengyi.wzy", "x is : + x +"y is : " + y +"z is : " + z); if (x> = accelerate_value | | y > = Accelerate_value || = accelerate_value) {Toast.maketext (); vibrator.tual.
효과지도 :