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方法。
但是没有工作,因为我的英语不好而且感谢你:)
答案 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);