Android Sms接收器结果主要活动

时间:2014-03-27 18:19:45

标签: android

MainActivity.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();
    }
}

SmsReceiver.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吐司上显示消息时,我有一个问题,所以我在接收器类中创建mIntent,然后我使用putExtra方法。

但是没有工作,因为我的英语不好而且感谢你:)

1 个答案:

答案 0 :(得分:1)

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

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

您的错误在于您使用Intent构建了新的SmsReceiver.class(但您需要启动MainActivity)并且您没有以这样的意图开始任何活动。

编辑1:另外,请注意 - 您正在尝试在工作线程中运行吐司。这是不可能的。删除您的匿名线程并将您的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(..)中的持续时间参数设置为 2 。这与Toast类中的任何魔术常数都不对应。您必须使用其中一个常量: Toast.LENGTH_LONG Toast.LENGTH_SHORT 。因此,将代码重写为:

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