Android 短信接收器结果到主要 Activity

标签 android

主 Activity .java

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.anaekran);
        Thread t = new Thread(new Runnable() {
            public void run() {
                String smsMsj = getIntent().getStringExtra("sms");
                if(smsMsj != null){
                    Toast.makeText(getApplication(), smsMsj, 2).show();
                }
                try {
                    Thread.sleep(4000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        t.start();
    }
}

短信接收者.java

public class SmsReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        Bundle mesaj = intent.getExtras();
        SmsMessage[] smsMessage = null;
        String msj = "";

        if(mesaj!= null){
            Object[] pdus = (Object[])mesaj.get("pdus");
            smsMessage = new SmsMessage[pdus.length];
            for(int i = 0; i < pdus.length; i++){
                smsMessage[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                msj = smsMessage[i].getMessageBody();
            }

            Intent mIntent = new Intent(context, SmsReceiver.class);
            mIntent.putExtra("sms", msj);
        }
    }
}

我的接收器工作正常,但是当我想在我的 MainAcitivty toast 上显示消息时我遇到了一个问题,所以我在接收器类中创建了 mIntent,然后我使用了 putExtra 方法。

但没有用,抱歉我的英语不好,谢谢 :)

最佳答案

也许使用明确的 Intent 并启动它可以帮助你,嗯? :)

Intent mIntent = new Intent(context, MainActivity.class);
mIntent.putExtra("sms", msj);
context.startActivity(mIntent);

您的错误是您使用 SmsReceiver.class 构建了新的 Intent(但您需要启动 MainActivity)并且您没有带着这样的 Intent 开始任何 Activity 。

编辑 1:另外,请注意 - 您正在尝试在您的工作线程中运行 toast。这不可能。删除您的匿名线程并将您的 toast 代码移动到您的 onCreate(Bundle):

protected void onCreate(Bundle saveState){  
    ....
    String smsMsj = getIntent().getStringExtra("sms");
    if(smsMsj != null){
        Toast.makeText(getApplication(), smsMsj, 2).show();
    }
    ....
}

编辑 2:此外,您在 Toast.makeText(..) 中的 duration 参数设置为 2。这不对应于 Toast 类中的任何魔法常量。您必须使用以下常量之一:Toast.LENGTH_LONGToast.LENGTH_SHORT。因此,将您的代码重写为:

Toast.makeText(getApplication(), smsMsj, Toast.LENGTH_SHORT);

关于Android 短信接收器结果到主要 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696007/

相关文章:

java - 不在 Android Studio 中工作的教师应用百分比

android - 如何在 sqlite 中打印打开的游标列表?

java - Android 中带有图像和文本的 ListView

android - 在方向更改后重新创建 Activity 之前更改Intent bundle 数据

android - 一个AlertDialog,用于多个Activity?

android - HTML5 视频在浏览器中有效 - 但在 Android 模拟器中无效

Android:了解设备崩溃的原因

android - Xamarin Forms 中的应用程序设置/属性类似于 Android 中的共享首选项

android - 如何在android eclipse中链接多个表单?

android - Android 中的颜色替换器