在我的应用中接收短信

时间:2013-08-05 14:05:39

标签: java android sms broadcastreceiver

我正在创建一个接收短信的应用程序,我创建了一个扩展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();

    }
}
}

4 个答案:

答案 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);

    }
}
}

- 玩得开心! 别忘了添加权限!