待高手解决Android短信拦截问题! @安卓大神

菜鸟一枚,按照书上copy来的代码做短信拦截,用虚拟机测试成功,但用真机测试却总是不成功。按照程序逻辑,收到短信后应该弹出一个Toast提示,可我这里真机收到短信后没有出现Toast提示,真机还是像正常那样照常收到短信。
这里写图片描述这里写图片描述这里写图片描述

下面是代码:
1、先在AndroidMainActivity.xml中添加权限

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

也添加了receiver

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

优先级按照网友说的设置到了800,书上没说让添加优先级。添加和不添加优先级的两种情况都测试了,都是在虚拟机上可行,在真机上就不行。很纳闷。

2、创建了一个新的类ShortMessageReceiver

package alex.example.receiver;

import java.util.Set;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class ShortMessageReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Set<String> keys = bundle.keySet();
            // 查看收到的广播包含哪些数据
            for (String key : keys) {
                Log.d("key", key);
            }
            // 获得收到的短信数据
            Object[] objArray = (Object[]) bundle.get("pdus");
            SmsMessage[] messages = new SmsMessage[objArray.length];
            // 循环处理收到的所有短信
            for (int i = 0; i < objArray.length; i++) {
                // 将每条短信数据转换成SmsMessage对象
                messages[i] = SmsMessage.createFromPdu((byte[]) objArray[i]);
                // 获得发送短信的电话号码和短信内容
                String s = "手机号:" + messages[i].getOriginatingAddress() + "\n";
                s += "短信内容:" + messages[i].getDisplayMessageBody();
                // 显示发送短信的电话号码和短信内容
                Toast.makeText(context, s, Toast.LENGTH_LONG).show();
            }
        }
    }
}

下面是虚拟机上的测试图
虚拟机测试可行

那为什么在真机上测试就不行呢,就不出Toast提示。

真机信息

型号系统安卓版本内核版本
Coolpad 7295CMIUI-4.12.184.2.2 JDQ394.2.2 JDQ39

请大神给看看到底哪里出了问题,为什么用虚拟机测试成功,用真机测试却总是不成功!这里写图片描述这里写图片描述这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值