【问题标题】:Cannot read SMS in KitKat, very confused在 KitKat 中无法读取短信,很困惑
【发布时间】:2014-07-11 19:56:58
【问题描述】:

试图让一个非常简单的 SMS 广播接收器在我的 KitKat 手机上工作,但没有任何效果。让我有点发疯。除了阅读短信我不需要做任何事情,所以我认为 KitKat 中的重大短信更改不会影响我。我已经阅读了很多帖子,尝试了一切。

根据我的阅读,我应该只需要 SMS_DELIVER_ACTION 对文本进行简单的嗅探。我已将 READ_SMS 和 RECEIVE_SMS 放入清单权限中。一开始我只用了 JUST READ_SMS。我假设接收首先将其提供给应用程序,可能是被奇巧“默认”短信行为短路。顺便说一句,我所做的一切都不会让我的应用程序显示在默认的短信系统设置中。

我有一个非常简单的应用程序,它有 1 个活动、1 个广播接收器类,并且已在清单中注册。在 onReceive 中,我正在尝试写入 LogCat 并在收到文本时显示祝酒词。没有任何东西会命中该代码。

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.smoftware.smsreceivertest.app" >
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".SMSReceiver"
            android:permission="android.permission.BROADCAST_SMS">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_DELIVER_ACTION"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

还有我的广播接收器...

public class SMSReceiver extends BroadcastReceiver {
    public SMSReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"in onReceive of SMSReceiver",Toast.LENGTH_LONG).show();
        Log.d("SMSReceiver", "In body of onReceive method");
    }
}

我有一个主要活动,但它只是一个 helloworld 模板。我确保拥有这个,因为我已经阅读了 3.1 的更改,如果尚未启动,广播接收器将无法运行。

在调试中运行应该没有任何问题,不是吗?即便如此,我已经停止了该应用程序并重新启动,以便手动打开它。

谢谢!

【问题讨论】:

  • &lt;intent-filter&gt; 操作更改为"android.provider.Telephony.SMS_RECEIVED"

标签: android broadcastreceiver android-4.4-kitkat


【解决方案1】:

将接收者的IntentFilter设置为:

<receiver android:name=".SMSReceiver">   
     <intent-filter>
         <action android:name="android.provider.Telephony.SMS_RECEIVED" />
     </intent-filter>
 </receiver>

以下权限:

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

【讨论】:

  • 太棒了,谢谢!我以为我曾经以这种方式设置过,但我想不是。我刚刚删除了RECEIVE_SMS权限作为测试,它没有工作。但是只有 RECEIVE_SMS 是可以的。 android 文档说 RECEIVE_SMS 允许监控传入的 SMS。所以至少对于我只写调试并显示 Toast 的测试,我只需要 RECEIVE_SMS。酷。
猜你喜欢
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2012-08-04
  • 1970-01-01
相关资源
最近更新 更多