小弟初学android,最近在搞短信发送与接收,在模拟器上可以正常发送和接收,可是到了真机测试时接收短信就不行了(发送短信正常,下面是接收短信的问题,我是用2.2版本测试的)。接收短信一般方法都是继承 BroadcastReceiver,重写onReceive()方法。
然后在xml配置<receiver>
<receiver android:name=".ReceiverDemo" android:enabled="true" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>也增加了权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />在模拟器可以监听到短信并拿出短信内容,但手机上就不能接收短信,甚至我发现onReceive()方法没有执行,这问题纠结了我几天,希望哪位高人帮忙看看,无限感谢!!
下面是ReceiverDemo类
package com.linkcm;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;public class ReceiverDemo extends BroadcastReceiver {
private static final String strRes = "android.provider.Telephony.SMS_RECEIVED"; @Override
public void onReceive(Context context, Intent intent) {
/*
 * 
 * 判断是否是SMS_RECEIVED事件被触发
 */
if (intent.getAction().equals(strRes)) {
StringBuilder sb = new StringBuilder();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msg = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
msg[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
for (SmsMessage currMsg : msg) {
sb.append("您收到了来自:【");
sb.append(currMsg.getDisplayOriginatingAddress());
sb.append("】/n的信息,内容:");
sb.append(currMsg.getDisplayMessageBody());
}
Toast toast = Toast.makeText(context,
"收到了短消息: " + sb.toString(), Toast.LENGTH_LONG);
toast.show();
this.abortBroadcast();
}
}
}}

解决方案 »

  1.   

    在真机上时,你是否安装了第三方的短信软件?
    短信广播没有接收到,有可能是2方面的原因:
    1、内存不足(概率极低);
    2、短信广播被第三方软件截获了,导致自己的receiver接收不到短信。
      

  2.   

    <intent-filter android:priority="1000">
    将android:priority="1000" 改为 android:priority="10000" 为正解
      

  3.   

    很可能手机不支持,装个第三方的拦截短信APP测试一下是否可以截取。
    小米手机上可以控制每个应用的权限。