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 级别编号,您可能需要更新教程中的代码。此外,如果您将其投入生产,添加它也无妨:(使您的应用对没有手机功能的平板电脑不可见)。 【参考方案1】:

在 AndroidManifest.xml 中,您使用 SMSBroadcastReceiver,但您的 BroadcastReceiver 类名是 MySMSApp。此外,您的 &lt;receiver&gt; 元素位于 &lt;activity&gt; 元素内。

尝试使用这个:

<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 广播接收器不工作的主要内容,如果未能解决你的问题,请参考以下文章

广播接收器不适用于SMS

权限拒绝:广播 Intent act=android.provider.Telephony.SMS_RECEIVED

Android,在服务当前不可用时使用 Telephony.SMS_RECEIVED 操作接收广播

android.provider.Telephony.SMS_RECEIVED 的广播者权限

Android studio之广播监听接收短信

如何在 Android Studio 中使用广播接收器接收短信?