将数据从广播接收器传递到另一个活动

时间:2012-02-04 00:56:36

标签: android android-intent broadcastreceiver

嗨,我一直遇到广播接收器的问题,并将信息传递给另一个活动。我正在尝试创建一个应用程序来捕获传入的SMS消息,在文本中查找网站,然后弹出一个警告对话框,询问用户是否想要访问该网站。

public class TextReceiver extends BroadcastReceiver{

public void onReceive(Context context, Intent intent)
{
    // .. other code that
    // sets received SMS into message

    Toast toast = Toast.makeText(context,
            "Received Text: " + message.getMessageBody(), Toast.LENGTH_LONG);
            toast.show();
 }

因此代码工作正常,接收文本时会弹出一条带有消息的祝酒词。吐司没用,但它显示接收器工作。但是我想与一个活动进行通信以显示警报对话框并启动webView。我已经编写了代码,它将对网站进行字符串搜索并打开webView。是否有可能从广播接收器获取字符串并执行类似的操作?:

    public class ReceiveText extends Activity{
public void onCreate(Bundle savedInstanceState) {

// Somehow pass the string from the receiver into this activity, 
//stored in variable messages

findOpen(messages);

// is that possible?

}
public class findOpen(string messages){
// do stuff ... open alert...open site if OK
}

所以基本上我只想将广播接收器中的字符串传递给另一个将使用该字符串的活动。剩下的代码基本上就是我需要的就是字符串......我是新手,Java和任何帮助都会非常感激。感谢

3 个答案:

答案 0 :(得分:9)

如果您的活动名为ReceiveText,那么在BroadcastReceiver中,您应该执行以下操作:

Intent i = new Intent(context, ReceiveText.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("message", message.getMessageBody());
context.startActivity(i);

然后,在您的活动中,您将需要getExtra:

Intent intent = getIntent();
String message = intent.getStringExtra("message");

然后您将根据需要使用message

如果您只是希望ReceiveText活动将消息显示为对话框,请在清单中为<activity android:theme="@android:style/Theme.Dialog" />声明ReceiveText,然后将消息设置为活动中的文本视图。< / p>

如果我需要添加任何其他内容,请告诉我。

答案 1 :(得分:8)

  1. 在您要获取数据的活动中实例化BroadcastReceiver,例如:

    private BroadcastReceiver mServiceReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //Extract your data - better to use constants...
            String IncomingSms=intent.getStringExtra("incomingSms");//
            String phoneNumber=intent.getStringExtra("incomingPhoneNumber");
    
        }
    };
    
  2. onPause()注销您的接收器:

    @Override
    protected void onPause() {
        super.onPause();
        try {
            if(mServiceReceiver != null){
            unregisterReceiver(mServiceReceiver);
            }
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
    
  3. onResume()注册:

    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.SmsReceiver");
        registerReceiver(mServiceReceiver , filter);
    }
    
  4. 通过Intent从服务广播您的数据,例如:

    Intent i = new Intent("android.intent.action.SmsReceiver").putExtra("incomingSms", message);
    i.putExtra("incomingPhoneNumber", phoneNumber);
    context.sendBroadcast(i);
    
  5. 就是这样!古德勒克!

答案 2 :(得分:0)

我们可以使用 LocalBroadcastManager 将数据从 onReceive 发送到另一个活动。 这意味着您再次使用上下文广播数据

@Override
    public void onReceive(Context context, Intent intent) {
    
        Log.d("Broadcast", "wifi  ConnectivityReceiver");
    
                Bundle extras = intent.getExtras();
                Intent intent = new Intent("broadCastName");
                // Data you need to pass to another activity
                intent .putExtra("message", extras.getString(Config.MESSAGE_KEY)); 
                context.sendBroadcast(intent );
    } 
相关问题