Android SMS 广播接收器不工作
Posted
技术标签:
【中文标题】Android SMS 广播接收器不工作【英文标题】:Android SMS Broadcast Receiver not working 【发布时间】:2015-04-15 18:27:23 【问题描述】:我正在尝试构建一个接收传入短信通知的应用程序。我需要帮助,因为在任何设备上都未检测到传入的 SMS。我正在使用从这里获得的以下代码:
http://karanbalkar.com/2014/09/display-incoming-sms-messages-in-android/
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 MySMSApp extends BroadcastReceiver
public static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent)
// TODO Auto-generated method stub
if (intent.getAction().equals(ACTION))
Bundle bundle = intent.getExtras();
if (bundle != null)
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message : messages)
String strMessageFrom = message.getDisplayOriginatingAddress();
String strMessageBody = message.getDisplayMessageBody();
Toast.makeText(context, "SMS Message received from:" +strMessageFrom, Toast.LENGTH_LONG).show();
Toast.makeText(context, "SMS Message content" +strMessageBody, Toast.LENGTH_LONG).show();
清单内容如下。我已经设置了意图接收器来触发上面的类,但似乎没有这样做。我无法远程登录到模拟器以欺骗传入的短信,所以我不知道发生了什么。
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<receiver android:name=".SMSBroadcastReceiver" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" >
</action>
</intent-filter>
</receiver>
</activity>
</application>
【问题讨论】:
听从马蒂亚的建议。他是对的。另外,以防万一,不要使用最新的目标 sdk,请使用您找到的教程中使用的相同 api 级别。 Kit-Kat/Lollipop 中关于 sms 的情况发生了一些变化,因此如果您想使用最新的 api 级别编号,您可能需要更新教程中的代码。此外,如果您将其投入生产,添加它也无妨:在 AndroidManifest.xml 中,您使用 SMSBroadcastReceiver
,但您的 BroadcastReceiver
类名是 MySMSApp
。此外,您的 <receiver>
元素位于 <activity>
元素内。
尝试使用这个:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MySMSApp">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
【讨论】:
以上是关于Android SMS 广播接收器不工作的主要内容,如果未能解决你的问题,请参考以下文章
权限拒绝:广播 Intent act=android.provider.Telephony.SMS_RECEIVED
Android,在服务当前不可用时使用 Telephony.SMS_RECEIVED 操作接收广播