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



package com.dongdongsongcan.app; 
 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.SmsMessage; 
 
import com.su.dolphin.utils.LogUtil; 
 
import java.util.ArrayList; 
import java.util.List; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
 
public class SMSReceiver extends BroadcastReceiver 
 
{ 
 
    public interface ISMSListener { 
        public void onSmsReceive(String verifyCode); 
    } 
 
    private static ISMSListener mSMSListener; 
 
    public SMSReceiver(ISMSListener ismsListener) { 
        mSMSListener = ismsListener; 
    } 
 
    public static final String TAG = "ImiChatSMSReceiver"; 
 
    //android.provider.Telephony.Sms.Intents 
 
    public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; 
 
 
    @Override 
 
    public void onReceive(Context context, Intent intent) 
 
    { 
        LogUtil.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); 
        if (intent.getAction().equals(SMS_RECEIVED_ACTION)) 
 
        { 
 
            SmsMessage[] messages = getMessagesFromIntent(intent); 
 
            for (SmsMessage message : messages) 
 
            { 
 
//                LogUtil.d(message.getOriginatingAddress() + " : " + 
// 
//                        message.getDisplayOriginatingAddress() + " : " + 
// 
//                        message.getDisplayMessageBody() + " : " + 
// 
//                        message.getTimestampMillis()); 
 
 
                String msg = message.getDisplayMessageBody(); 
                LogUtil.d("MSG: " + msg); 
                String verifyCode = null; 
                Pattern p = Pattern.compile("\\d{4}"); 
                Matcher m = p.matcher(msg); 
                while (m.find()) { 
                    verifyCode = m.group(); 
                    break; 
                } 
                LogUtil.d("verifyCode " + verifyCode); 
                if (mSMSListener != null) { 
                    mSMSListener.onSmsReceive(verifyCode); 
                } 
            } 
 
        } 
 
    } 
 
 
    public final SmsMessage[] getMessagesFromIntent(Intent intent) 
 
    { 
 
        Object[] messages = (Object[]) intent.getSerializableExtra("pdus"); 
 
        byte[][] pduObjs = new byte[messages.length][]; 
 
 
        for (int i = 0; i < messages.length; i++) 
 
        { 
 
            pduObjs[i] = (byte[]) messages[i]; 
 
        } 
 
        byte[][] pdus = new byte[pduObjs.length][]; 
 
        int pduCount = pdus.length; 
 
        SmsMessage[] msgs = new SmsMessage[pduCount]; 
 
        for (int i = 0; i < pduCount; i++) 
 
        { 
 
            pdus[i] = pduObjs[i]; 
 
            msgs[i] = SmsMessage.createFromPdu(pdus[i]); 
 
        } 
 
        return msgs; 
 
    } 
 
 
}

 

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

图片JNI(C++\Java)高斯模糊 多线程详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。