当前位置:操作系统 > 安卓/Android >>

彩信的拦截与发送

前段时间(已经过去两个月了....)公司让搞一下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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,