2012-11-09 67 views
1

在我的應用程序中,當用戶通過單擊註銷按鈕或通過按Home按鈕關閉應用程序而退出應用程序時,我需要向服務器發送註銷請求。Android,如何通過廣播接收器接收主頁按鈕點擊?

按鈕沒有問題,結果如我所料。問題是如何獲得主頁按鈕。根據我的研究,不可能使用onKeyDown(int keyCode, KeyEvent event),因爲我們可以使用它來獲取後退按鈕。

我在想的解決方案是註冊一個接收器,並在點擊主頁按鈕時發送廣播。所以通過接收器,我可以啓動一個服務來向服務器發送註銷請求。

我目前的問題是我無法獲得主頁按鈕,只要我點擊它。這是我寫的代碼:

的manifest.xml

<application ... 

     <receiver android:name="HomeButtonReceiver" > 
      <intent-filter> 
       <category android:name="android.intent.category.HOME" /> 
      </intent-filter> 
     </receiver> 

</application> 

HomeButtonReceiver

public class HomeButtonReceiver extends BroadcastReceiver { 

    private final String TAG = "HomeButtonReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i(TAG, "inside onReceive()..."); 
    } 
} 

任何意見/建議,將不勝感激。 謝謝

+0

With [this](http://stackoverflow.com/questions/10025660/override-home-and-back-button-is-case-a-boolean-is-true/10025904#10025904)你可以處理Home按鈕,所以只需發送廣播就可以了。 –

+0

謝謝hotveryspicy,我測試了你的方式,但我沒有成功。它可以捕捉音量上/下,但我不能得到家庭媒體。 – Hesam

回答

1

爲什麼不使用dispatchKeyEvent函數。它可以攔截HOME按鈕按下事件。

@Override 
    public boolean dispatchKeyEvent(KeyEvent keyevent) { 

     if (keyevent.getKeyCode() == KeyEvent.KEYCODE_HOME) { 
      //Do here what you want 
      return true; 
     } 
     else 
      return super.dispatchKeyEvent(event); 
    } 
+0

謝謝SahilMahajanMj,我修改你的代碼if(event.getKeyCode()== KeyEvent.KEYCODE_HOME){ \t Log.i(TAG,「dispatchKeyEvent()...」); 返回true; } else \t Log.i(TAG,「...」); return super.dispatchKeyEvent(event);此代碼可以捕捉音量上/下,但當我按Home鍵什麼都沒有發生。 – Hesam

+0

不起作用... – Janosch

0

你可以做的是這樣的

創建您的主頁按鈕事件捕手

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode==KeyEvent.KEYCODE_HOME){ 
     //Send your own custom broadcast message 
    } 
    return super.onKeyDown(keyCode, event); 
} 

現在你可以創建一個廣播接收器,這樣就可以收到你的信息

你可以參考herehere關於如何發送廣播消息

0

如果您只是需要了解用戶什麼時候退出應用程序,爲什麼不使用Activity的方法?

+0

感謝Binoy Babu,這是因爲當用戶關閉應用程序,然後我需要發送請求到服務器取消會話ID。如果我按照建議的方式進行,則用戶無法瀏覽應用程序。因此,我需要知道用戶何時關閉應用程序,然後發送該請求。 – Hesam