2012-08-06 87 views
0

當我的主要活動將字符串傳遞到廣播接收器時,當應用程序當前未在屏幕上打開時,我遇到問題。從活動傳遞字符串到廣播接收器

當創建MainActivity類時,意圖過濾器通過廣播接收器返回正確的信息,但只要用戶轉到其電話上的主屏幕,廣播接收器就會在接收器被觸發時開始返回「null」屏幕外。

1.新意圖

Intent home_page = new Intent(newIntent.this,MainActivity.class); 

ownAddress = ""+customInput.getText().toString(); 
    home_page.putExtra("session_number", ""+ownAddress); 

startActivity(home_page); 


2. MainActivity.java:

public class MainActivity extends DroidGap { 
SmsReceiver mAppReceiver = new SmsReceiver(); 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle bundle = getIntent().getExtras(); 
    final String ownAddress = bundle.getString("session_number"); 

    registerReceiver(mAppReceiver, new IntentFilter("SmsReceiver")); 
    Intent intent = new Intent("SmsReceiver"); 
     intent.putExtra("passAddress", ownAddress); 
    sendBroadcast(intent); 

} 

} 


3. SmsReceiver.java:

public class SmsReceiver extends BroadcastReceiver { 

public void onReceive(Context context, Intent intent) { 

    Toast showme = Toast.makeText(context,"Number: "+intent.getExtras().get("passAddress"),Toast.LENGTH_LONG); 
    showme.show(); 

} 

} 

有沒有辦法將字符串傳遞給廣播接收器,而應用程序只在後臺運行,或者無論何時創建MainActivity類?

+0

「Activity」實際上是一個UI框架。如果它不可見,那麼一般來說,它沒有運行。解釋更多關於你想要做什麼的,目前還不清楚。 – Squonk 2012-08-06 23:33:56

+0

每次觸發它時,我需要從活動傳遞給廣播接收器的字符串,因爲我構建的應用程序將根據字符串的內容執行HttpPost。 – localhost 2012-08-07 00:14:42

+0

我還是不明白 - 「活動」不應該被「事件」'觸發',這就是'BroadcastReceivers'的全部要點。什麼是'觸發''活動' - 在我看來,你需要繞過'中間人'('活動'),因爲你不能保證它會一直運行,因爲你的問題顯然是全部關於。 「Activity」是一個UI框架 - 它不是一個通用的類。 – Squonk 2012-08-07 00:31:09

回答

0

我在這裏可能是錯誤的,但從邏輯上講,當接收器被觸發時,「廣播接收器開始返回」null的原因是因爲當傳遞給onReceive構造函數的上下文在用戶轉到主屏幕。

我想一個傳遞字符串的解決方案是在MainActivity中創建一個公共靜態字符串變量,用於存儲要傳遞的字符串值。然後你所要做的就是在你的BroadcastReceiver中靜態地訪問這個字符串。

+0

**「...在MainActivity中創建一個公共靜態字符串變量......」**請不要爲Android的「活動」提供此建議。任何延伸'Activity'的類都不應暴露靜態變量或方法。 – Squonk 2012-08-06 23:36:59

+0

這是否有任何解決方法? – localhost 2012-08-07 00:15:53

+0

@Squonk哦,我不知道!我很好奇,爲什麼我們不應該那樣做? – 2012-08-07 01:40:30

相關問題