Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 探测装置定向_Android_Automation_Accelerometer_Autorotate - Fatal编程技术网

Android 探测装置定向

Android 探测装置定向,android,automation,accelerometer,autorotate,Android,Automation,Accelerometer,Autorotate,我需要检测android设备方向的变化,而不需要手动播放传感器数据,同时保持活动方向与某些方向一致 onConfigurationChange将不起作用,因为它会使我的活动不旋转 围绕传感器数据来检测方向的变化,我认为作为一个车轮的发明,因为Android已经实现了检测设备朝向变化的算法的嵌入式实现。从另一方面来说,方向变化的检测并不是像这样简单的检查 public void onSensorChanged(SensorEvent event) { if (event.s

我需要检测android设备方向的变化,而不需要手动播放传感器数据,同时保持活动方向与某些方向一致

onConfigurationChange
将不起作用,因为它会使我的活动不旋转

围绕传感器数据来检测方向的变化,我认为作为一个车轮的发明,因为Android已经实现了检测设备朝向变化的算法的嵌入式实现。从另一方面来说,方向变化的检测并不是像这样简单的检查

    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER || event.values.length < 3) {
            return;
        }
        //getResources().getConfiguration().orientation;
        if (event.values[1] < 6.5 && event.values[1] > -6.5) {
            if (orientation!=1) {
                Log.d("Sensor", "Protrait");
            }
            orientation=1;
        } else {
            if (orientation!=0) {
                Log.d("Sensor", "Landscape");
            }
            orientation=0;
        }
   }
传感器更改时的公共无效(传感器事件){ if(event.sensor.getType()!=sensor.TYPE|加速计| event.values.length<3){ 返回; } //getResources().getConfiguration().orientation; if(事件值[1]<6.5&&event.values[1]>-6.5){ 如果(方向!=1){ Log.d(“传感器”、“保护器”); } 方向=1; }否则{ 如果(方向!=0){ Log.d(“传感器”、“景观”); } 方向=0; } } 它确实需要真正的数据处理,比如过滤噪音和突然的短暂震动/旋转


那么,您知道如何使用传统服务检测设备方向吗?(再一次,我会将我的活动固定在某个方向上,这样配置更改将不起作用)

有一个方向事件的侦听器


我希望这将对您有所帮助

我的活动设置为始终处于纵向模式。将此代码放在一次创建中

    myOrientationEventListener = new OrientationEventListener(this,SensorManager.SENSOR_DELAY_NORMAL) {
        public void onOrientationChanged(int arg0) {
            if (arg0>=315 || arg0<45){
                currentOrientation = Surface.ROTATION_90;
            }else if (arg0>=45 && arg0<135){
                currentOrientation = Surface.ROTATION_180;
            }else if (arg0>=135 && arg0<225){
                currentOrientation = Surface.ROTATION_270;
            }else if (arg0>=225 && arg0<315){
                currentOrientation = Surface.ROTATION_0;
            }
        }
    };
myOrientationEventListener=新方向EventListener(此为SensorManager.SENSOR\u DELAY\u正常){
公共无效onOrientationChanged(int arg0){

如果(arg0>=315 | | arg0=45&&arg0=135&&arg0=225&&arg0通过在清单中设置
screenOrientation
属性,您将无法从
OnConfiguration Changed
中获取方向值,因为它将停止触发,可以实现
SensorEventListener
以获得
俯仰
滚动
yaw
角度来计算方向,但对于这样的任务来说,这有点复杂,而且有点过分。我找到的最佳解决方案是使用
OrientationEventListener
,以下代码将在方向更改时更新旋转值,该值根据旋转角度为0到4:

private OrientationEventListener listener;
private int rotation;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    listener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
        @Override
        public void onOrientationChanged(int orientation) {
            rotation = ((orientation + 45) / 90) % 4;
        }
    };
    if (listener.canDetectOrientation()) listener.enable();
    else listener = null; // Orientation detection not supported
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (listener != null) listener.disable();
}

这不是你想要的吗???不,我没有任何可以改变的资源谢谢,这正是我需要的!!!尊敬!!!我是新安卓,但似乎很多安卓开发者都不知道这一点,即使在stackoverflowYou欢迎Deimus,没有人是完美的,每个人都有自己的专业领域,我刚刚开始使用过去的3-5天:)愉快的指导这对我帮助很大。当活动锁定在方向上,但您仍然需要获取设备位置时,这是正确的方法:)