阅读短信不能正常工作

时间:2015-07-16 14:25:58

标签: android sms broadcastreceiver android-4.0-ice-cream-sandwich smsmanager

我写了下面的方法来读取传入的短信文本。当默认的SMS客户端是本机SMS客户端时,此代码在Android 4.04中完美运行,但是当SMS客户端是环聊时,该方法不起作用。

相同的方法在Android 5中使用环聊作为短信客户端,问题仅在Android 4.04中,环聊为短信客户端。如果我遗漏了任何东西,请告诉我。

static boolean readSMS(Intent intent, int code) {
    try {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdusObj = (Object[]) bundle.get("pdus");
            for (int i = 0; i < pdusObj.length; i++) {
                SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String message = currentMessage.getDisplayMessageBody();
                if (message.contains(String.valueOf(code)))
                    return true;
            }
        }
    } catch (Exception e) {
        return false;
    }
    return false;
}

从BroadCastReceiver中的java代码调用该方法。

     receiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    Bundle bundle = intent.getExtras();
                    if (bundle != null) {
                     if (readSMS(intent, code)) {
                    ------------------
                    }
                }

BroadCastReceiver被调用为:

   context.registerReceiver(receiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));

的Manifest.xml

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

1 个答案:

答案 0 :(得分:2)

传入的短信是Broadcast transmission,您可以注册receiver来收听短信并根据您的逻辑进行回复。您可以向SMS广播注册多个接收者,他们将按一定的顺序逐个获取SMS 我们怎么知道订单?每个接收器都有一个priority,操作系统将SMS从较高优先级的接收器发送到较低的接收器 高达Android 4.4(不包括),您可以使用abortBroadcast();语句,这将终止分派。让我们说我们有两个应用程序--A和B与SMS接收器。如果A的优先级高于B而A使用中止语句,则应用B将永远不会获得短信。从Android 4.4开始,您就不能再中止短信传输了 从您的问题看,当您使用Android 4.0.4时,环聊客户端具有较高的应用优先级,并且它会中止广播传输,而默认客户端不会中止它(或具有较低的优先级)。当您切换到Android 5时,环聊无法中止短信,因此您的应用可以正常工作 至于优先级 - documentation表示&#34; 该值必须是整数,例如&#34; 100&#34;。数字越大,优先级越高。默认值为0.该值必须大于-1000且小于1000。&#34;。
你可以添加你的menifanifest线

<intent-filter android:priority="999">

并希望环聊的优先级更低。