센서 바이 SDK인가 방향

오늘날 스마트 폰의 대부분은 다양한 센서를 가지고,이 개 블로그 안쪽에, 우리는지도 방법과지도에 자신의 위치를 ​​찾을 수를 표시하는 방법을 배웠습니다.

다음으로, 우리는 전화 앞뒤로 일치하는 방향 센서를 결합하려는.

렌더링에서 첫 모습을 잡아 당깁니다.
쓰기 사진은 여기에 설명
말을 많이하지, 다음은 타임 라인과 코드입니다.
첫째, 우리는 내가 업로드하지 않습니다이의 방향을 나타내는 아이콘이 필요한 학생들은 저에게 연락해야합니다.
어떻게 아이콘을 초기화?
우리는 BitmapDescriptor 객체를 정의해야하고 초기화

private BitmapDescriptor mIconLocation;
mIconLocation= BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked);
        //初始化图标

이 세트 후, 우리는 전화에 효과를 볼 수 있지만, 우리는 전화를 흔들어 아무리, 방향이 변경되지 않습니다 것을 발견 할 것이다.

탐색 아이콘은 휴대 전화를 따르도록 만드는 방법을 다음 나타나고?

그것은 우리가 전화 시스템의 서비스를받을하는 데 사용되는 센서 인터페이스, 새로운 클래스를 생성하고 구현해야합니다. 이 전화 자체 센서 서비스를 얻을 수 있기 때문에, 우리는 목적은, 물론, 우리는 전체 환경의 컨텍스트를 인스턴스화 할 수 인스턴스화 센서 다음에 SensorManager 객체를 인스턴스화해야합니다.

private SensorManager mSensorManager;
    private Context mContext;
    private Sensor mSensor;

이 클래스에서 우리는 onSensorChanged () 메소드 내부에서 작성한 우리가 전화 로직 코드를 흔들 때 작성하는 데 사용. 하지만 먼저 우리는 기록하지 않습니다. 센서의 개폐 방향을 설정하기 위해이 센서를 급 폐쇄의 시작 () 오픈 센서 STOP () 메소드에서 두 방법의 내부에 설정해야한다. 여기에서 우리는 매개 변수 컨텍스트를 전달 생성자를 설정합니다.

public Direction(Context context){
        this.mContext=context;
    }
    public void start(){
    }//用于开启传感器
    public void stop(){
    }//关闭传感器
    public void onSensorChanged(SensorEvent event){
    }//手机晃动的逻辑代码

그런 다음 우리는 getSystemService (Context.SENSOR_SERVICE) 메소드의 시작 () 메소드의 컨텍스트 내에서 가서 SensorManager 전화 센서 서비스를 얻기 위해, 개체를 강제로하지만, 우리는 또한 SensorManager 객체가 비어 있지 않은 경우로 다음을 결정해야합니다 getDefaultSensor (Sensor.TYPE_ORIENTATION) SensorManager 목표 방향 센서는 이동 물체를 센서가 얻어진다.

mSensorManager=(SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
        if (mSensorManager!=null){
         mSensor=  mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
        //获得方向传感器
        }
        if(mSensor!=null){
            mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY_UI);
        }

코드에서 우리는 객체 센서가 비어 있는지 확인해야합니다, 우리가 마지막 인수 감도 설정에 관한 통과 것을, 그때는 방향 센서를 엽니 다 () SensorManager.registerListener입니다, 메모를 비어 있지 않습니다. 우리가 시작합니다 그래서 () 메소드는 전체 내부의 내용을 작성합니다.
우리가 추가로 내부 정지 () 메소드

mSensorManager.unregisterListener(this);

센서 서비스를 닫습니다.

다음으로, 우리는 onSensorChanged () 쓰기 로직 코드에 방법 필요

첫째,이 방법에서 우리는 SensorEvent 예를 전달 유의해야
센서 방향 센서를 판정 한 후, 상기 서비스 유형이 획득되고, 우리는, 비교를 위해, 이때 저장 X 축 방향으로 물체의 플로트를 정의 할 필요 (가) 초기 X 축 위치를 정의 할 필요가 시작된다.

 private float lastX;
 public void onSensorChanged(SensorEvent event){
        if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){

            float x=event.values[SensorManager.DATA_X];
 .......
  }
}

나머지 우리는 X 축 위치 좌표가 변경 될 때 이루어지는 방법이 활성화 된 콜백 함수를 추가 할 필요가있다. 이 때, 우리는 인터페이스를 정의 할 필요가있다.

public interface OnOrientationListener {
        void onOrientationChanged(float x);
    }
}

상기 설치 후,이 인터페이스 방법은 인스턴스화

public void setOnOrientationListener(OnOrientationListener mOnOrientationListener){
       this.mOnOrientationListener=mOnOrientationListener;
    }

이 후 우리는 당신의 자신의 콜백 함수를 추가 할 수 있습니다.

if(Math.abs(x-lastX)>0.2){
                if (mOnOrientationListener!=null){
                    mOnOrientationListener.onOrientationChanged(x);
                }

            }
            lastX=x;

좀 더 확실한와 휴대 전화의 방향을 변경하기 위해, 나는 변화가 0.2을 초과 발생할 때 x는 변화를 좌표 설정하려면 여기를입니다.
이 경우, 우리는 센서 인터페이스이 클래스가 완료 실현하겠습니다.
나머지는 메인 이벤트 내부에 코드를 추가하는 것입니다.
너무 많은 공간을 느낌 모두를 유지하기 위해, 나는 다음 하나를 실시간 맵을 추가하는 방법, 위성지도를 전환하는 방법과 내 자리를 찾을 수있는 방법에 대해습니다 다음 블로그를 다음 블로그 내부에 참여합니다.

나는 또한 안드로이드 개발에 새로운 오전, 필연적으로, 쓰기, 아무것도 잘못이있다, 나는 위대한 하나님을 볼 수 있도록 노력하겠습니다, 당신은 소수점을 도울 수 있습니다.

쓰기 사진은 여기에 설명

게시 37 개 원래 기사 · 원 찬양 10 ·은 10000 +를 볼

추천

출처blog.csdn.net/OneLinee/article/details/78306084