彩信的拦截与发送
前段时间(已经过去两个月了....)公司让搞一下android彩信的拦截与发送,于是就在网上找了一些资料,开始研究它的实现过程。
PS:需要从系统源码中扣取部分文件,大概在30个左右,不知道能不能精简,没认真看过。这里我重点说一下彩信的拦截和解析,因为彩信解析方面的资料相对较少。发送的部分我会提供一下我的参考文章,并且可能会转载一下这篇文章,我就是通过这篇文章实现的彩信发送。
因为代码量比较大,所以就只贴下关键源码,并且说下流程和要注意的问题。仔细搜索一下的话网上可以找到相关的demo和资料(主要是彩信发送方面的,解析的好像没有),但是在使用时要注意,他们说的并不是全对的,某些方面给你误导了,他们的整体流程和源码都是好的,但是在一些点上刻意写错了(主要是pdu组包、图片或附件的类型等)。
简要说一下我的流程吧:
一、拦截彩信
1、注册彩信接收器
彩信的拦截和网上百度或google 出来的一样,都是注册一个广播接收器,然后把该接收器的权限设置成最大值,这个最大值不是网上说的1000而是2147483647(好像是整型的最大值)
在AdroidMainfest.xml里的代码如下:
[html] <!-- MMS SMS接收器 -->
<receiver
android:name=".app.MmsSmsReceiver">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
<intent-filter android:priority="2147483647">
<action
android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data
android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<!-- MMS SMS接收器 -->
<receiver
android:name=".app.MmsSmsReceiver">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
<intent-filter android:priority="2147483647">
<action
android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data
android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
2、定义自己的广播接收处理类
和普通的广播接收一样,我们要自己写一个广播接收处理的类,但是要在onReceive方法里添加一句:abortBroadcast();这样在我们拦截到该条彩信信息后,当执行这一句时,该系统广播(就是接收到彩信的系统广播)就不在继续往下发送。
我的代码:
PS:部分方法可能不通用,自己按自己的情况来。
[java] import com.shanzha.activity.InvalidHeaderValueException;
import com.shanzha.activity.MmsContent;
import com.shanzha.activity.PduHeaders;
import com.shanzha.activity.PduParser;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MmsSmsReceiver extends BroadcastReceiver {
/**
* 接收短信
*/
public static final String SMS_RECEIVE_ACTION = "android.provider.Telephony.SMS_RECEIVED";
/**
* 接收彩信
*/
public static final String MMS_RECEIVE_ACTION = "android.provider.Telephony.WAP_PUSH_RECEIVED";
public static long date = 0;
Context context;
byte[] TransactionId;
@Override
public void onReceive(final Context context, Intent intent) {
// TODO Auto-generated method stub
this.context=context;
String action = intent.getAction();
//彩信
if(action.equals(MMS_RECEIVE_ACTION)){
PduParser parser = new PduParser();
try {
PduHeaders headers = parser.parseHeaders(intent.getByteArrayExtra("data"));
TransactionId = headers.getTransactionId();
if (headers.getMessageType() == PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND) {
//号码获取
String from = headers.getFrom();
final String content_location = headers.getContentLocation();
if (content_location != null) {
new Thread() {
public void run() {
MmsConnect mmsConnect = new MmsContent(context,content_location,TransactionId);
try {
mmsConnect.connect();
&n
补充:移动开发 , Android ,