android - 无法捕获使用 android.provider.Telephony.SMS_RECEIVED 收到的短信

标签 android android-intent sms broadcastreceiver intentfilter

收到短信时,我无法捕捉到 Intent 。以下是我的服务代码。我能够捕捉到“Intent.ACTION_SCREEN_ON”和“Intent.ACTION_SCREEN_OFF”,但我无法捕捉到 SMS_RECEIVED Intent “android.provider.Telephony.SMS_RECEIVED”。

真诚地感谢任何关于我在这里做错的提示?

public class SmsCatcher extends Service{

BroadcastReceiver myBroadcast = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        Log.i("myBroadcast SmsCatcher", "Entered onReceive method");
        if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            Log.i("myBroadcast SmsCatcher", "Caught SCREEN_OFF");
        }
        if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            Log.i("myBroadcast SmsCatcher", "Caught SCREEN_ON");
        }

        if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
            Log.i("myBroadcast SmsCatcher", "SMS_RECEIVED");
        }
    }
};

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    Log.i("neil SmsCatcher", "Entered onCreate() in 'SmsCatcher extends Service'");
    Toast.makeText(this, "Entered onCreate() in 'SmsCatcher extends Service'", Toast.LENGTH_LONG).show();

    registerReceiver(myBroadcast, new IntentFilter(Intent.ACTION_SCREEN_ON));
    registerReceiver(myBroadcast, new IntentFilter(Intent.ACTION_SCREEN_OFF));

}

@Override
public void onDestroy() {
    super.onDestroy();

    Log.i("neil SmsCatcher", "Entered onDestroy() in 'SmsCatcher extends Service'");
    Toast.makeText(this, "Entered onDestroy() in 'SmsCatcher extends Service'", Toast.LENGTH_LONG).show();
}


}

更新 1:从我正在进行的调试中添加更多信息: 我使用了 App Internal Broadcasts Monitor收到短信却看到有广播却什么也看不到,很奇怪。可能是什么原因? 我安装了其他 SMS 应用程序(Hangout、AT&T Messages)- 这些不能抑制广播吗?

更新 2:发现问题但不知道如何解决 我卸载了 Google Hangouts (replaces Talk)应用程序和它的作品! 有什么解决办法吗? (我应该根据 stackoverflow 规则打开一个单独的线程吗?)

更新 3:找到根本原因(当然是在下面的帮助下,谢谢) 事实证明,由于新的 Google Hangouts 应用程序,我需要 setPriority(int) .我在 Enabling SMS support in Hangouts 2.0 breaks the BroadcastReceiver of SMS_RECEIVED in my app 找到了解决方案

最佳答案

您需要注册 android.provider.Telephony.SMS_RECEIVED Intent 过滤器,只有当您注册了它之后,您才能在 onRecive 中检查 Intent ,例如

    IntentFilter filter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
this.registerReceiver(myBroadcastReceiver, filter);

问题更新: 事实证明,Google Hangouts 应用程序在收到短信后会立即中止广播,因此在 Hangouts 2.0 中禁用短信支持可能会解决此问题。

关于android - 无法捕获使用 android.provider.Telephony.SMS_RECEIVED 收到的短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20534936/

相关文章:

java - 如果条件满足,如何转到Android中的另一个 Activity ?

android - 将字符串从一个 Activity 传递到另一个 Activity 时出现问题

android - 按下后退时不返回父 Activity

java - 使用本地电话调制解调器作为短信网关从 php 发送短信

blackberry - 如何在黑莓中以编程方式发送短信

java - Android - 确定短信文本限制

java - 在 android 上创建了两次 Activity

android - 操作栏图标未显示在 android 操作栏中

android - Ionic - HTTP POST 请求不适用于 native Android 但适用于 Ionic Devapp

android-layout - 在android按钮中对齐自动换行文本