2012-08-24 36 views
1

我有一個soundrecorder android線程,我需要知道在記錄時是否連接了麥克風/頭戴式耳機,所以我需要在thread.how中使用BroadcastReceiver()我註冊了嗎? this.registerReceiver()不會工作,因爲它只適用於活動。如何註冊一個線程內的BroadcastReceiver()

如果在線程中使用broadcasereceivers不是一個好主意,那麼解決方案是什麼?

這裏是將一個活動,不會工作裏面工作線程中的代碼:

headsetReceiver = new BroadcastReceiver() { 
     @Override 
      public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      Log.i("Broadcast Receiver", action); 
      if ((action.compareTo(Intent.ACTION_HEADSET_PLUG)) == 0) // if 
                     // the 
                     // action 
                     // match 
                     // a 
                     // headset 
                     // one 
      { 
       int headSetState = intent.getIntExtra("state", 0); // get 
                    // the 
                    // headset 
                    // state 
                    // property 
       int hasMicrophone = intent.getIntExtra("microphone", 0);// get 
                     // the 
                     // headset 
                     // microphone 
                     // property 
       if ((headSetState == 0) && (hasMicrophone == 0)) // headset 
                    // was 
                    // unplugged 
                    // & 
                    // has 
                    // no 
                    // microphone 
       { 
        // do whatever 
       } 
      } 
     } 
    }; 

    this.registerReceiver(headsetReceiver, new IntentFilter(
      Intent.ACTION_HEADSET_PLUG)); 

回答

1

您將需要上下文傳遞給線程構造函數,然後使用它來註冊的廣播接收器:

//this.ctx is passed to the Thread constructor 
this.ctx.registerReceiver(headsetReceiver, new IntentFilter(
      Intent.ACTION_HEADSET_PLUG)); 

不要忘記註銷您的接收器在最後{}在你的線程或泄漏,可能會發生:

finally{ 
     ctx.unregisterReceiver(headsetReceiver); 
} 

爲了更改主線程(例如活動)內的UI,您需要設置處理程序

相關問題