首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onSensorChanged方位角值跳跃

onSensorChanged方位角值跳跃
EN

Stack Overflow用户
提问于 2013-01-05 00:04:11
回答 1查看 871关注 0票数 0

我是Android的新手,所以我相信我在某个地方犯了一个错误,无法修复它。我有一个主要的活动,让我们称之为主菜单。在此基础上,我通过按下适当的按钮来启动我想要的活动,从而开始其他活动。问题是我在一个启动的活动中使用了onSensorchanged()。如果第一次启动应用程序,则启动的活动值的行为与预期一致,但如果关闭活动(换句话说,现在我返回到主菜单)并再次启动活动,则从onSensorchanged()读取的值将跳转。正确的值与错误的值组合在一起。我使用intents来启动第二个活动,并认为问题出在这里。

主菜单代码:

代码语言:javascript
复制
public class MainMenuActivity extends Activity{

Button gps_btn,lineFollow_btn,man_control_btn;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_menu);
    addListenerOnButton();
    Debug.startMethodTracing("Navigation Trace");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main_menu, menu);
    return true;
}

@Override
protected void onPause() 
{


    super.onPause();
    Debug.stopMethodTracing();

}

public void addListenerOnButton() 
{

    final Context context = this;

    gps_btn = (Button) findViewById(R.id.GPS_btn);

    gps_btn.setOnClickListener(new OnClickListener() 
    {

        public void onClick(View arg0) 
        {

            Intent intent = new Intent(context, AutoControl.class);
                        startActivity(intent);   

        }

    });

    lineFollow_btn = (Button) findViewById(R.id.line_follower_btn);

    lineFollow_btn.setOnClickListener(new OnClickListener() 
    {

        public void onClick(View arg0) 
        {

            Intent intent2 = new Intent(context, CamDemoActivity.class);
                        startActivity(intent2);   

        }

    });

    man_control_btn = (Button) findViewById(R.id.man_ctrl_btn);

    man_control_btn.setOnClickListener(new OnClickListener() 
    {

        public void onClick(View arg0) 
        {

            Intent intent2 = new Intent(context, ManualAct_PLC.class);
                        startActivity(intent2);   

        }

    });

}

OnSensorChanged的代码如下:

代码语言:javascript
复制
    public void onSensorChanged(SensorEvent event) 
{
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
        gravity = event.values;
    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
        geoMagnetic = event.values;
    if (gravity != null && geoMagnetic != null) 
    {
        float R[] = new float[9];
        float I[] = new float[9];
        boolean success = SensorManager.getRotationMatrix(R, I, gravity,geoMagnetic);

        if (success) 
        {
            /* Orientation has azimuth, pitch and roll */
            float orientation[] = new float[3];
            SensorManager.getOrientation(R, orientation);
            float azimut = orientation[0];
            updateSensorInfoView(azimut);           
            steerRobot(azimut);
            System.out.println("Raw Sensor value:"  + Double.toString(Math.toDegrees(azimut)));
            System.out.println("Degree Sensor value:"  + calculations.compassDegString(azimut));
        }
    }

}

查看记录的值,一旦再次启动AutoControl活动,我的传感器数据就会出乎意料:

代码语言:javascript
复制
    01-04 17:52:34.925: I/System.out(31387): Calculatebearing value:2.168326647225342
    01-04 17:52:34.925: I/System.out(31387): Raw Sensor value:-116.11590698474976
    01-04 17:52:34.925: I/System.out(31387): Degree Sensor value:244.0
    01-04 17:52:34.955: I/System.out(31387): Calculatebearing value:173.96307878454928
    01-04 17:52:34.955: I/System.out(31387): Raw Sensor value:72.0893408779263
    01-04 17:52:34.955: I/System.out(31387): Degree Sensor value:72.0
    01-04 17:52:35.065: I/System.out(31387): Calculatebearing value:108.5784565015826
    01-04 17:52:35.065: I/System.out(31387): Raw Sensor value:137.473963160893
    01-04 17:52:35.070: I/System.out(31387): Degree Sensor value:137.0

请注意,度数传感器的值在很短的时间内大幅跳跃。我有一个箭头,它是根据计算出的方位角绘制在屏幕上的,一旦第二次加载活动,它就会疯狂地跳来跳去。

我怀疑此活动创建了第二个实例,但在清单文件中使用了android:launchMode="singleInstance“标记来尝试阻止这种情况。

我还有没有其他人遇到过这样的问题?我似乎在网上找不到类似的问题。

EN

回答 1

Stack Overflow用户

发布于 2013-01-06 04:49:59

在将问题活动移动到它自己的应用程序中之后,我仍然遇到了同样的问题。消除了对同一活动的多个实例正在运行的担忧。

阅读本文后:https://groups.google.com/forum/?fromgroups=#!topic/android-developers/UNMaDEUcXb0

我通过更改我的代码OnSensorchanged方法解决了这个问题。在多次运行后,指针似乎出现了问题,因此最好使用senor值对象的克隆进行更改:

改变

案例Sensor.TYPE_MAGNETIC_FIELD: mag = event.values;

案例Sensor.TYPE_MAGNETIC_FIELD: mag = event.values.clone();

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

https://stackoverflow.com/questions/14160533

复制
相关文章

相似问题

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