我正在创建一个接收短信的应用程序,我创建了一个扩展BroadcastReceiver的类,以便在应用程序中的吐司中接收和显示短信。我还添加了我的清单以及接收器声明的权限。问题是它似乎仍然没有显示消息。它只会作为通知显示在顶部栏上。希望有人能够看到我出错的地方。我必须在我的mainactivity中有一些代码才能显示消息吗?或者它应该直接从接收器中显示在我的所有活动中?代码如下:
更新
我最终删除了我的接收器并重新创建了所有内容,现在看起来工作正常
SmsReceiver.java:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras ==null)
return;
//toast
Toast.makeText(context, "Received", Toast.LENGTH_LONG).show();
Object[] pdus = (Object[]) extras.get("pdus");
for (int i = 0; i < pdus.length; i++) {
SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = SMessage.getOriginatingAddress();
String body = SMessage.getMessageBody().toString();
Intent in = new Intent("SmsMessage.intent.MAIN").putExtra("get_msg", sender+":"+body);
context.sendBroadcast(in);
this.abortBroadcast();
}
}
}
答案 0 :(得分:2)
问题是它似乎仍然没有显示消息。它只会作为通知显示在顶部栏上
你知道吗 - Ordered Broadcast?
如果您不知道 - 这是一个广播,由所有注册此广播的接收者同步(一个接一个)接收。您可以在清单接收器中设置减速度priority,并且每个接收器可以使用aboartBroadcast()方法控制广播是否会在优先级链中传递给其他已注册的接收器。
这是什么,接收短信? - 当SMS收到时,系统发送有序广播。如果您的接收者优先级低于“默认短信应用程序”优先级 - 那么通常会发生的事情是首先获得广播的应用程序将取消广播,并且您永远不会收到它。
要在默认SMS应用程序之前获取广播,您必须声明具有高优先级的接收器(提供优先级= 1000应该可以做到这一点)。
没有提供优先级 - 它会自动设置为零。
您可以查看此示例 - How Can i INTERCEPT an Incoming SMS With A specific Text
还要确保您在清单
中声明了对RECEIVE_SMS的权限答案 1 :(得分:1)
尝试重新开始并像这样设置接收器....
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras ==null)
return;
//toast
Toast.makeText(context, "Received", Toast.LENGTH_LONG).show();
Object[] pdus = (Object[]) extras.get("pdus");
for (int i = 0; i < pdus.length; i++) {
SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = SMessage.getOriginatingAddress();
String body = SMessage.getMessageBody().toString();
Intent in = new Intent("SmsMessage.intent.MAIN").putExtra("get_msg", sender+":"+body);
context.sendBroadcast(in);
this.abortBroadcast();
}
}
}
答案 2 :(得分:0)
@Override
public void onReceive(Context context, Intent arg1) {
SmsMessage msgs[] = getMessagesFromIntent(arg1);
for (int i = 0; i < msgs.length; i++) {
SmsMessage mesg = msgs[i];
Toast toast = Toast.makeText(context, mesg.getDisplayMessageBody(), Toast.LENGTH_LONG);
toast.show();
}
}
答案 3 :(得分:0)
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
// retrieve the SMS message received ::
Object[] pdus = (Object[]) extras.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
str += "SMS from : " + msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
// Toast to display SMS ::
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
// Send SMS ::
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage("put your phoneNumber(emulatorPort)", null, str, null, null);
}
}
}
- 玩得开心! 别忘了添加权限!