1

我正在创建一个接收 SMS 文本消息的应用程序,我创建了一个扩展 BroadcastReceiver 的类,以在应用程序内的 toast 中接收和显示 SMS 消息。我还添加了权限以及我的清单以及接收者的声明。问题是它似乎仍然没有显示该消息。它只会作为通知出现在顶部栏上。希望有人能够看到我哪里出错了。为了显示消息,我是否必须在我的 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();

    }
}
}
4

4 回答 4

2

问题是它似乎仍然没有显示该消息。它只会作为通知出现在顶部栏

你知道什么是有序广播吗?

万一您不知道 - 这是一个广播,由注册此广播的所有接收器同步(一个接一个地)接收。您可以在清单接收器减速中设置一个优先级 ,并且每个接收器都可以使用aboartBroadcast()方法控制广播是否将在优先级链中传递给其他已注册的接收器。

这是怎么回事和接收短信?- 系统在收到短信时发送有序广播。如果您的接收器优先级低于“默认 SMS 应用程序”优先级 - 那么通常发生的情况是首先获得广播的应用程序将取消广播,您将永远不会收到它。

要在默认 SMS 应用程序之前获得广播,您必须声明具有高优先级的接收器(提供优先级 = 1000 应该可以解决问题)。

不提供优先级 - 它自动设置为零。

你可以看看这个例子 -我如何拦截带有特定文本的传入短信

还要确保您在清单中声明了对 RECEIVE_SMS 的权限

于 2013-08-05T14:37:10.120 回答
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();

    }
}
}
于 2013-08-07T10:00:07.470 回答
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);

    }
}
}

- 玩得开心!不要忘记添加权限!

于 2014-05-01T15:49:41.227 回答
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();
        }
}
于 2013-08-05T14:25:27.150 回答