首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方位角返回为0

方位角返回为0
EN

Stack Overflow用户
提问于 2015-09-16 00:13:20
回答 2查看 118关注 0票数 0

当用户拍照时,我正在尝试获取用户手机的方位。然而,当我将方位角放到屏幕上只是为了调试目的时,它总是回到0.0。我是个使用传感器的新手,所以我正在尝试解决这个问题。我的代码是

代码语言:javascript
复制
private void dispatchTakePictureIntent() {
    double latitude, longitude;
    if (mGpsLocationTracker.canGetLocation()) {
        latitude = mGpsLocationTracker.getLatitude();
        longitude = mGpsLocationTracker.getLongitude();
    } else {
        latitude = 0;
        longitude = 0;
    }
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }

    Toast.makeText(this, "" + latitude + ", " + longitude, Toast.LENGTH_SHORT).show();

    getDirection ();

    Toast.makeText(this, Float.toString(degree), Toast.LENGTH_SHORT).show();
}

public void getDirection() {
    SensorManager mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    if(mySensors.size() > 0){
        mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_UI);
    }
}

/*
DOES NOT WORK. NEED TO FIX
 */
private SensorEventListener mySensorEventListener = new SensorEventListener(){

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        float radianValue = Math.round(event.values[0]);
        degree = (float) Math.toDegrees(radianValue);
        if (degree < 0.0f) {
            degree += 360.0f;
        }

    }
};

public void takePicture (View view) {
    dispatchTakePictureIntent();
}

有人能帮我纠正我做错了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2015-09-16 00:38:16

方向传感器不会以度为单位返回角度吗?假设为弧度并转换为度数。考虑到这一点,它仍然不应该给你0。

票数 0
EN

Stack Overflow用户

发布于 2015-09-16 11:45:52

TYPE_ORIENTATION会折旧,如果设备不是平坦的,则不会给出正确的结果。您需要先使用TYPE_ACCELEROMETERTYPE_MAGNETIC_FIELD获取rotation matrix,然后调用remapCoordinateSystem,然后再调用getOrientation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32590865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档