6

我想开发一个跟踪发送/接收短信的应用程序。我的意思是,当用户从其设备发送消息时,应将消息详细信息保存到我提供的表格中。同样,当设备收到任何短信时,也应该将其保存到我提供的表格中。

请注意,用户使用 Android 的默认消息应用程序发送消息。我的意思是我没有将我的应用程序与默认消息应用程序集成。我只需要跟踪从该应用程序发送的所有消息,因为 Android 会跟踪其Message app的Sent Message文件夹中的所有已发送消息。

我该怎么做?请帮我。我不需要答案,但我需要一些线索来做到这一点。

请不要建议阅读收件箱和发件箱等中的消息。因为我想在用户发送/接收消息时保存消息。不是在发送或接收之后。

4

2 回答 2

10

这很容易通过在您的清单中写入广播接收器来完成:

编辑:似乎只适用于 SMS_RECEIVED 看到这个线程

<receiver android:name=".SMSReceiver"  android:enabled="true">
 <intent-filter android:priority="1000">
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
      <action android:name="android.provider.Telephony.SMS_SENT"/>
 </intent-filter>
</receiver>

和许可:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

然后像这样创建接收器:

public class SMSReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
       if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
    //do something with the received sms        
       }else  if(intent.getAction().equals("android.provider.Telephony.SMS_SENT")){
            //do something with the sended sms
     }
  }
}

处理传入的短信可能如下所示:

Bundle extras = intent.getExtras();
Object[] pdus = (Object[]) extras.get("pdus");
for (Object pdu : pdus) {
        SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdu);
        String origin = msg.getOriginatingAddress();
        String body = msg.getMessageBody();
....
}

如果您想防止在 commen InBox 中推送短信,您可以通过以下方式实现:

abortBroadcast();
于 2012-06-06T08:27:20.000 回答
2

不要调用abortBroadcast() 会阻止其他应用接收 SMS_RECEIVED 有序广播。这是不好的行为,这不是 android 的目的。我不明白为什么谷歌甚至让开发人员中止系统意图的广播,如短信。

于 2013-05-17T08:56:05.790 回答