今天在网上看了一个重力传感器的代码,说什么横屏和竖屏的时候,方向是不一样的,有点晕,例子代码是写的竖屏的,就是根据手机的翻转,小球会动,竖屏的时候正常,我横屏的时候运行的时候老是感觉怪怪的。就想自己写个横屏的例子研究研究,但是我怎样知道我当前的手机是横屏放着还是竖屏放着呢?
    去网上搜了一下啊,有个这样的方法: int t = this.getRequestedOrientation();
if(t == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE ){
Log.i(MySensor.TAG, "当前手机处于横屏");
} else if(t ==
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
Log.i(MySensor.TAG, "当前手机处于竖屏");
}    但是我单步调试了一下,获得的t值是-1,不管我手机是横屏放着启动程序,还是竖屏放着启动程序,得到的值都是-1,怎么回事啊?

解决方案 »

  1.   

    刚又试了另外一种方法,这个方法可以正确的获得当前屏幕的状态,代码贴出来,Display display = ((WindowManager) this.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
            int orientation = display.getOrientation();
    if(orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE ){
    Log.i(MySensor.TAG, "当前手机处于横屏");
    } else if(orientation ==ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
    Log.i(MySensor.TAG, "当前手机处于竖屏");
    }问题虽然解决了,但是为什么第一种方法没有获得正确的值呢,请各位继续发表意见,谢谢
      

  2.   

    是用错方法了 还可以        int t = myActivity.this.getResources().getConfiguration().orientation ;
                     ;
            if(t == Configuration.ORIENTATION_LANDSCAPE){
                Log.i("33333", "当前手机处于横屏");
            } else if(t ==Configuration.ORIENTATION_PORTRAIT){
                Log.i("33333", "当前手机处于竖屏");
            }
      

  3.   

    public int getRequestedOrientation ()
    Since: API Level 1 Return the current requested orientation of the activity. This will either be the orientation requested in its component's manifest, or the last requested orientation given to setRequestedOrientation(int).
    Returns
    Returns an orientation constant as used in ActivityInfo.screenOrientation. public static final int SCREEN_ORIENTATION_UNSPECIFIED 
    Since: API Level 1 Constant corresponding to unspecified in the screenOrientation attribute. 
    Constant Value: -1 (0xffffffff) 看手册,getRequestedOrientation返回的是manifest内定义的screenOrientation属性或最近一次setRequestedOrientation设置的orientation。 你没定义manifest和setRequestedOrientation设置返回的是SCREEN_ORIENTATION_UNSPECIFIED也就是-1
      

  4.   

    http://blog.csdn.net/ch_984326013/article/details/6647745
      

  5.   

    大哥 这方法也用错了 看下Display类的手册 这样用才对 查看屏的旋转角度的  Display display = ((WindowManager) this.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
       t = display.getOrientation();
       if(t == Surface.ROTATION_0  ){
           Log.i("TAG", "ROTATION_0");
       } else if(t ==Surface.ROTATION_90 ){
           Log.i("TAG", "ROTATION_90");
       }else if(t ==Surface.ROTATION_180 ){
           Log.i("TAG", "ROTATION_180");
       }else if(t ==Surface.ROTATION_270 ){
           Log.i("TAG", "ROTATION_270");
       }
      

  6.   

    在Activity中覆盖
    public void onConfigurationChanged(Configuration config) {
         super.onConfigurationChanged(config);
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
         int width = dm.widthPixels;
    int height = dm.heightPixels;
    if(width > height){ //横屏

    }else{

    }
    }
      

  7.   

    啊,崩溃了,我刚用这个方法获得值是正确的啊,是这个样子的,我从屏幕状态变化的时候,activity的oncreate方法是重新调用的,是我没说清楚吧。