2010-07-10 18 views
1

我想從一個新的線程發送廣播是開始。發送來自可運行的廣播意圖

這是我的嘗試:

 new Thread(new Runnable() { 
     public void run() { 
      //some other code for timing. 
      // .. 
      // .. 
      Intent broadcastIntent = new Intent(); 
      broadcastIntent.setAction(Intent.ACTION_ANSWER); 
      this.sendBroadcast(broadcastIntent); 
     } 
    }).start(); 

但ofcourse我需要context..this將無法正常工作。 我該如何處理這個問題。

回答

-3

我也遇到過這個問題。

這是我的解決方案。您正在執行此操作的應用程序必須具有一個活動。 因此,在該Activity中,爲其自身創建一個靜態變量並將其分配給它。

例如:

public class MyActivity extends Activity { 
    static MyActivity thisActivity = this; 
    //rest of the code goes here 
} 

現在,在線程,這樣做:

MyActivity.thisActivity.sendBroadcast(myintent); 

希望,這回答您的問題!

+0

不是一個好主意。 – natario 2015-12-23 11:52:25

+0

很多錯誤的好主意。 – 2016-04-27 10:44:28

+0

靜態活動是內存泄漏的一個步驟。永遠不要這樣做。 – Gark 2016-08-17 08:19:52

3

我最常做的,雖然比較哈克,如下:

final Context mCtx = this; 
new Thread(new Runnable() { 
    public void run() { 
     //some other code for timing. 
     // .. 
     // .. 
     Intent broadcastIntent = new Intent(mCtx, TargetClass.java); 
     broadcastIntent.setAction(Intent.ACTION_ANSWER); 
     this.sendBroadcast(broadcastIntent); 
    } 
}).start(); 

另外,要記住,在Intent構造目標Java類。

希望它有幫助!

+0

如果Thread對象是一些Context的子類的內部類型的實例,這也許會有意義嗎? 並沒有Thread.sendBroadcast方法。正確的調用是SomeActivityName.this.sendBroadcast(broadcastIntent)。 – 2010-07-10 08:23:10

+0

對不起,我的意思是mCtx.sendBroadcast(broadcastIntent)。 – 2010-07-10 16:04:56

+1

應該不是 'Intent broadcastIntent = new Intent(mCtx,TargetClass.class);'? – midhunhk 2012-08-07 12:38:15