2012-01-21 47 views
1

在我的活動中,我使用「onSensorChanged」方法監視傳感器。如何在屏幕方向更改期間處理傳感器監控?

當按下該活動中的按鈕時(在「onClick」方法中),我開始監視傳感器。

我在onPause和onResume方法中註冊並取消註冊監聽。

下面是代碼:

public void onCreate(Bundle savedInstanceState) { 
    //Here i set "mySensor" 
} 

public void onClick(View view){ 
    sensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_FASTEST); 
} 

protected void onPause() { 
    sensorManager.unregisterListener(this, mySensor); 
} 

protected void onResume() { 
    sensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_FASTEST); 
} 

public final void onSensorChanged(SensorEvent event) { 
    //do things 
} 

的問題是,當有屏幕方向的變化,監控停止,內「onSensorChanged」的東西,但我停止,直到我再次按下按鈕。

我一直在閱讀,似乎當屏幕方向改變時,我的活動被破壞和重新創建,但我希望傳感器的監控在該過程中不停止。

我該如何保持監控?我認爲它必須使用捆綁,但我不知道。

Thanx。

回答

1

您有幾種選擇:

  1. 您可以把傳感器監聽到你的應用程序類,通過android:name<application>在你的清單中定義。請參閱here,命名您從android.app.Application派生的類。我會推薦這種方法。

  2. 您可以添加android:configChanges="orientation"到你的活動清單,但是,如上所述here,你需要處理的適當的資源,如方向具體佈局重新加載,在你活動的。我不會推薦這樣做,因爲當其他配置更改發生時,您仍然會遇到監視問題消失,或者您需要計算應用程序如何處理它們(並將它們添加到android:configChanges中的更改列表中)。

  3. 殘疾人定向使用android:screenOrientation描述here完全改變你的應用程序,但我真的不會推薦,除非有,爲什麼你希望你在某一方位的應用程序只工作等原因。

+0

Thanx的答覆。我認爲這是我需要:) – Alex

0

事實上,Android上的活動會在設備的方向發生變化時被破壞並重新創建。如果你不關心所有的方向,你可以將你的活動限制在一個方向上。或者,如果您希望爲多個方向提供支持(默認方式),您可以將傳感器讀取部分轉換爲靜態單例(您可以從所需的任何Activity中調用),轉換爲應用程序類或應用程序類的子類引用的單獨類),您可以撥打電話getApplication() —閱讀this瞭解有關應用程序類的更多信息。所有三種選擇都是保持全球活動一般性的不錯選擇。

如果您希望即使在應用程序處於後臺或應用程序終止時仍想繼續讀取傳感器數據,也可以使用服務並與您的活動來回傳遞數據當應用程序正在運行時。

+0

Thanx的信息,我會看看應用類 – Alex