关闭

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

标签: android短信
418人阅读 评论(0) 收藏 举报
分类:

菜鸟一枚,按照书上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 7295C MIUI-4.12.18 4.2.2 JDQ39 4.2.2 JDQ39

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43916次
    • 积分:856
    • 等级:
    • 排名:千里之外
    • 原创:33篇
    • 转载:14篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论
  • 启动活动的最佳写法

    balalay: 小白想问一下,看了《第一行代码》,实在搞不懂这个哪里佳了,不还是需要问别人需要传递哪些数据吗?