1

我正在開發一個基本上是一個小部件和一個服務的應用程序。 小部件只是一個我希望它在設備背景中運行服務的按鈕。 因此,用戶只需單擊該按鈕,UI中什麼也不會發生,服務將在後臺啓動。 但我希望使用IntentService實現的後臺服務始終在單擊按鈕的按鈕後在後臺監聽我的設備抖動。它必須隨時監測加速度傳感器的任何變化。 最後我想打開某個應用程序,如果用戶搖動他的設備。我的IntentService在後臺如何總是收聽設備的抖動?

我已經實現了小部件,我點擊了按鈕,服務運行。我也執行了搖動部分,我可以在搖晃之後獲得搖動並做一些事情。我也知道如何在震動之後打開另一個應用程序。我不能通過這項服務來做到這一點!所以我的問題是這樣的:

  • 我必須讓我的IntentService類實現SensorEventListener嗎?
  • 如果是的話,這種實現方式是否足以讓它隨時收聽傳感器?我應該怎麼做onHandleIntent(Intent intent)呢?!
  • 如果在常規活動中實施了傳感器更改,則將在onSensorChanged(SensorEvent sensorEvent)中監聽所有傳感器更改。這是否意味着我必須將所有功能都放在該功能中? onHandleIntent中沒有任何內容?
  • 我也有這個意圖,來自我的小部件,我的服務,我不知道該怎麼辦!我已經開始intentService使用該意圖,但如果我不使用onHandleIntent我不能傳遞setAction爲我的意圖,所以它將是無用的!

我已回顧這個問題:["Shake" app to respond at any time]但我沒有得到服務在後臺偵聽的細節。

任何人都可以幫忙嗎?

+0

我要去試試這個:http://stackoverflow.com/questions/17480004/android-intent-service-implementing-sensoreventlistener 但是我研究了很多,明白,如果我想要一個後臺活動要爲用戶運行,我應該使用IntentService而不是Service來完成它! – BizMoto

回答

3

您可以同時使用ServiceIntentService。在這裏我已經給出了一種適合你的方法。對於ServiceIntentService之間的差異,請按照this鏈接進行操作。

public class service extends Service implements SensorEventListener { 
@Override 

public void onCreate() { 
    super.onCreate(); 
//register your sensor manager listener here 
} 

@Override 
public void onDestroy() { 
//unregister your listener here 
} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     //detect the shake and do your work here 
    } 

} 
+0

是的!謝謝。關鍵在於創建和管理者註冊。我只有onStartCommand來完成我的服務工作。那麼onStartCommand中發生了什麼?無用? – BizMoto

+0

不!不是無用的。如果一個'Service'正在運行,並且您嘗試再次啓動特定的'Service',那麼'onCreate'不會被調用,但會調用'onStartCommand'。因此,只有在剛剛創建「服務」時調用「onCreate」,但每次嘗試啓動服務時都會調用「onStartCommand」。 – Naddy

+0

根據最近關於'onStartCommand'的文檔:'您不應該爲您的IntentService重寫此方法。相反,重寫onHandleIntent,當IntentService收到一個開始請求時系統會調用它。簡而言之,在最近的API版本中重寫'onHandleIntent'。 – nerdwaller

相關問題