2012-08-06 51 views
1

我花了最近幾個小時查看有關此主題的其他問題,但沒有發現能夠給我任何答案。將Android Java活動中的字符串傳遞給廣播接收器

什麼是從活動字符串傳遞給後臺的廣播接收器的最佳方式?

這是我的主要活動

public class AppActivity extends DroidGap { 
SmsReceiver mSmsReceiver = new SmsReceiver(); 

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

    ScrollView scroll; 
    scroll = new ScrollView(this); 

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

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

      Log.v("Example", "ownAddress: " + ownAddress); 
} 
} 


這裏是我的廣播接收器

public class AppReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent) { 

    final String ownAddress = intent.getStringExtra("passAddress"); 
    Toast test = Toast.makeText(context,""+ownAddress,Toast.LENGTH_LONG); 
    test.show(); 

    Log.v("Example", "ownAddress: " + ownAddress); 

} 
} 


這裏是明顯的對我的接收機

<service android:name=".MyService" android:enabled="true"/> 
<receiver android:name="AppReceiver"> 
      <intent-filter android:priority="2147483647"> 
       <action android:name="android.provider.Telephony.SMS_SENT"/> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
<receiver> 
<service android:name=".MyServiceSentReceived" android:enabled="true"/> 
<receiver android:name="AppReceiver"> 
       <intent-filter android:priority="2147483645"> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
        <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       </intent-filter> 
</receiver> 

當廣播接收器記錄應用程序崩潰的事件。我需要讓它在幕後運行並從我的主要活動中拉出一個字符串。

任何人都可以幫我解決這個問題,或者指點我一個正確的方向嗎?從評論

+0

郵政logcat的。 – JoxTraex 2012-08-06 19:55:17

+0

加入@JoxTraex – localhost 2012-08-06 19:58:22

回答

2

加法和聊天

您的字符串ownAddress將永遠是空的,除非有意向與在該包額外的關鍵passAddress的字符串。每當您捕獲接收器的意圖(無論是從SMS_SENTSMS_RECEIVED,或BOOT_COMPLETEDownAddress將是空的,因爲操作系統不提供命名passAddress額外的字符串。希望這能說明問題。

原來的答案

我沒有使用過DroidGap但是這是你想要的一個普通的Android活動。

活動:

public class AppActivity extends Activity { 
    AppReceiver mAppReceiver = new AppReceiver(); 

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

     registerReceiver(mAppReceiver, new IntentFilter("MyReceiver")); 

     String string = "Pass me."; 
     Intent intent = new Intent("MyReceiver"); 
     intent.putExtra("string", string); 
     sendBroadcast(intent); 
    } 
} 

接收機:

public class AppReceiver extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, intent.getStringExtra("string"), Toast.LENGTH_LONG).show(); 
    } 
} 

不要忘記註銷接收器的onDestroy(),像這樣:

@Override 
protected void onDestroy() { 
    unregisterReceiver(mAppReceiver); 
    super.onDestroy(); 
} 
+0

謝謝。這樣可行。 – localhost 2012-08-06 20:23:48

+0

不客氣。雖然許多方法都有描述性名稱,但我沒有解釋這些行爲,請不要猶豫,詢問您是否需要一點澄清。 – Sam 2012-08-06 20:28:33

+0

其實,在我的接收器中,我現在有最終的字符串ownAddress = intent.getStringExtra(「passAddress」);捕捉傳遞的字符串,但是當我在我的HttpPost中使用「ownAddress」時,它返回爲null。你知道這裏會發生什麼嗎? – localhost 2012-08-06 20:36:54

相關問題