2013-07-21 31 views

回答

0

爲了做到這一點,您需要在方向上註冊SensorEventListener,然後將回調添加到onSensorChanged方法。邏輯可能看起來非常類似於這裏實現的指南針:http://www.vogella.com/articles/AndroidSensor/article.html,除了您要檢查sensorEvent的值是否爲ROTATION_0,ROTATION_90,ROTATION_180或ROTATION_270並相應採取行動。

您還可能需要存儲以前的屏幕方向,以便檢查旋轉是180度旋轉還是90度旋轉。

+0

我想檢測z平面旋轉。這可能是xy平面。無論如何,我發現解決方案[這裏](http://android-er.blogspot.in/2011/02/detect-phone-flipping.html) – Naddy

+0

有沒有辦法檢測到它沒有服務,而是通過 powder366

4

我是這樣做:

package com.example.accsensordemo.service; 

import android.app.Service; 
import android.content.Intent; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.os.Vibrator; 
import android.util.Log; 

public class MotionControlService extends Service implements SensorEventListener { 

    private static final String TAG = "MotionControlService"; 

    private float mGZ = 0;//gravity acceleration along the z axis 
    private int mEventCountSinceGZChanged = 0; 
    private static final int MAX_COUNT_GZ_CHANGE = 10; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     Log.d(TAG, "onStartCommand, Started: " + mStarted); 

     if (!mStarted) { 
      mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 

      mSensorManager.registerListener(this, 
       mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
       SensorManager.SENSOR_DELAY_GAME); 

      mStarted = true; 
     } 
     return START_STICKY; 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     int type = event.sensor.getType(); 
     if (type == Sensor.TYPE_ACCELEROMETER) { 
      float gz = event.values[2]; 
      if (mGZ == 0) { 
       mGZ = gz; 
      } else { 
       if ((mGZ * gz) < 0) { 
        mEventCountSinceGZChanged++; 
        if (mEventCountSinceGZChanged == MAX_COUNT_GZ_CHANGE) { 
         mGZ = gz; 
         mEventCountSinceGZChanged = 0; 
         if (gz > 0) { 
          Log.d(TAG, "now screen is facing up."); 
         } else if (gz < 0) { 
          Log.d(TAG, "now screen is facing down."); 
         } 
        } 
       } else { 
        if (mEventCountSinceGZChanged > 0) { 
         mGZ = gz; 
         mEventCountSinceGZChanged = 0; 
        } 
       } 
      } 
     } 
    } 

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

它工作的很好,謝謝你隊友。 – Leebeedev

+0

完美,很好。感謝分享。 – Zekitez