2017-05-30 73 views
-6

是否可以在創建broadcastreceiver之後設置自己的上下文,如下所示:?BroadcastReceiver設置自己的上下文

public class MyFragment extends Fragment(){ 

Button myButton; 

@Override 
onCreate { 
    myButton = (Button) findview... 
    myButton.setOnClickListner(myListener); 
} 
. 
. 
. 

MyListener { 
@Override 
OnClickListner { 
    MyBroadCastReceiver receiver = new MyBroadCastReceiver() 
    receiver.setContext(mContext) 
    } 
}  
    public static class MyBroadcastReceiver extends BroadcastReceiver { 

    Context mContext; 

    void setContext(Context context) { 
     mContext = context; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (mContext!= null){ 
     log.d(TAG, "Context not null") 
     } 
    } 

}

每次方法的onReceive調用我的mContext爲空,是否有任何解決方案?

+0

請問你可以告訴你想要在這種情況下做什麼?打開一個活動什麼的? –

+0

當然,我想使用DialogFragment,這就是爲什麼我嘗試獲取與活動相關的上下文。 – Nimdokai

+0

請告訴我們爲什麼你需要活動的上下文。一般來說,當接收器被調用時,你不能假定Activity仍然存在,所以你不能安全地將它傳遞給一個活動上下文。這就是它通過自己的原因。唯一的例外是接收者在活動中註冊和未註冊,然後它通常是根據需要訪問活動的匿名子類。 –

回答

0

的問題是與艙單申報接收器,而它應該只在片段中聲明,改變它之後,一切都按照原樣運行。 感謝您的幫助。

0

試試這個我的朋友

public class MyReceiver extends BroadcastReceiver { 
     Context mContext; 

     public MyReceiver() { 
     super(); 
     } 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      mContext = context; 
      if (mContext != null) { 
       log.d(TAG, "Context not null") 
      }else{ 
      log.d(TAG, " null Context ") 
       } 
     } 
    } 

創建廣播的新對象,這樣

MyReceiver receiver = new MyReceiver(this); 
+0

嗨, 感謝重播,但這隻會改變mContext上下文從onReceive方法參數,我不想這個上下文,我真的需要活動上下文。 – Nimdokai

+0

比調用你的bradcast的活動,並通過例如MainActivity.this作爲背景 –

+0

當我試圖這樣做,我得到的消息,BroadCastReceiver必須有默認的構造函數。 – Nimdokai

相關問題