android - 将数据从广播接收器传递到另一个 Activity

标签 android android-intent broadcastreceiver

您好,我一直遇到广播接收器和将信息传递给另一个 Activity 的问题。我正在尝试创建一个应用程序来捕获传入的 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();
 }

这样代码就可以正常工作了,接收到一个文本,它会弹出一 strip 有消息的 toast 。 toast 没有用,但它表明接收器可以正常工作。但我想与一个 Activity 进行交流以显示一个警报对话框并启动一个 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
}

所以基本上我只想将一个字符串从广播接收器传递到另一个将使用该字符串的 Activity 。其余代码基本上就位,我只需要那个字符串...我是这个和 Java 的新手,我们将不胜感激。谢谢

最佳答案

  1. 在您想要获取数据的 Activity 中实例化一个 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);
    

就是这样!祝你好运!

关于android - 将数据从广播接收器传递到另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137477/

相关文章:

android - 如何在android中播放旋律?

android - 从 WallpaperService 启动 Intent 或向 WallpaperService 启动 Intent

android - Instagram 的视频分享 Android Intent

java - Android 通过单击不适用于 Galaxy 5 的按钮调用电话

android - Play 商店统计信息未随我的应用数据更新

Android Gallery View 监听器添加延迟?

java - Oreo 中的 sendOrderedBroadcast setPackage 要求

android - Android 无法取消当前闹钟

java - 在拨号器应用程序顶部检测来电并在后台打开服务

android - 添加另一个项目后应用程序崩溃 - cwac-pager