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

Dou*_*oug 6 android broadcastreceiver android-intent

嗨,我一直遇到广播接收器的问题,并将信息传递给另一个活动.我正在尝试创建一个应用程序来捕获传入的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();
 }
Run Code Online (Sandbox Code Playgroud)

因此代码工作正常,接收一个文本,它会弹出一个带有消息的祝酒词.吐司没用,但它显示接收器工作.但是我想与一个活动进行通信以显示警报对话框并启动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
}
Run Code Online (Sandbox Code Playgroud)

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

Ree*_*eed 13

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

Intent i = new Intent(context, ReceiveText.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("message", message.getMessageBody());
context.startActivity(i);
Run Code Online (Sandbox Code Playgroud)

然后,在您的活动中,您将需要getExtra,如下所示:

Intent intent = getIntent();
String message = intent.getStringExtra("message");
Run Code Online (Sandbox Code Playgroud)

然后你会message根据需要使用.

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

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

  • 对于任何继续实施此实施的人,它将重新启动您的活动。可能是你不想要的东西。 (2认同)

Gal*_*Rom 9

  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");
    
        }
    };
    
    Run Code Online (Sandbox Code Playgroud)
  2. 取消注册您的接收器onPause():

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

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

    Intent i = new Intent("android.intent.action.SmsReceiver").putExtra("incomingSms", message);
    i.putExtra("incomingPhoneNumber", phoneNumber);
    context.sendBroadcast(i);
    
    Run Code Online (Sandbox Code Playgroud)

就是这样!祝好运!