2012-12-08 38 views
0

我有首選項活動,它啓動了有關首選項更改的服務。 服務中我想檢測抖動動作。 這段代碼我有下面,當我在一個活動中使用它時工作正常,但是當我想在服務上使用它時,它只是不會工作,這是我在服務中如何使用我的shake detector代碼,我的代碼出了什麼問題?如何檢測在服務中晃動

public class back extends Service { 
SensorManager mSensorManager; 
ShakeEventListener mSensorListener; 



@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    super.onCreate(); 

} 

@Override 
public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    Toast.makeText(back.this, "Service Started", Toast.LENGTH_LONG).show(); 

    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mSensorListener = new ShakeEventListener(); 

     mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() { 

      public void onShake() { 
      Toast.makeText(back.this, "Shake!", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

} 


protected void onResume() { 
    mSensorManager.registerListener(mSensorListener, 
     mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
     SensorManager.SENSOR_DELAY_UI); 
    } 

    protected void onPause() { 
    mSensorManager.unregisterListener(mSensorListener); 

    } 

@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
} 


} 

我「服務啓動」吐司,這意味着服務的開始,但我搖裝置後,我沒有看到「搖!」吐司。我該怎麼辦。 感謝提前。

+0

ü解決您的問題? – Erum

+0

@ErumHannan是的,但它太舊了,我現在不記得解決方案! –

回答

0
  1. 服務不具備的onResume和的onPause http://developer.android.com/guide/components/services.html#Lifecycle

  2. 也可能需要從服務顯示吐司問題,以驗證該代碼使用LOG或顯示敬酒這樣

    新的處理程序( ).POST(新的Runnable(){ 公共無效的run(){ Toast.makeText(getApplicationContext(), 「msg」 中,Toast.LENGTH_LONG).show();}

+0

我用LOG,但是再次沒有在logcat中顯示任何東西。 :( –

+0

此代碼 'Toast.makeText(back.this,「Shake!」,Toast.LENGTH_SHORT).show();' 不會被調用,因爲方法onResume(其中訂閱偵聽器到SensorManager)呼叫,他不會被自動調用,所以它不會活動(請參閱我的前期帖子,第1項) – avesha

0

刪除簡歷和onPause。它不是服務的一部分。將其替換爲OnStartCommand()請參閱代碼。

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

    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mSensorManager.registerListener(mShakeDetector, mAccelerometer, SensorManager.SENSOR_DELAY_UI,new Handler()); 

    return START_STICKY; 
    } 

這應該做的伎倆:)