主 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_LONG 或 Toast.LENGTH_SHORT。因此,将您的代码重写为:
Toast.makeText(getApplication(), smsMsj, Toast.LENGTH_SHORT);
关于Android 短信接收器结果到主要 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696007/