【发布时间】:2013-12-12 04:16:05
【问题描述】:
收到短信时,我无法捕捉到意图。以下是我的服务代码。我能够捕捉到“Intent.ACTION_SCREEN_ON”和“Intent.ACTION_SCREEN_OFF”但我无法捕捉到SMS_RECEIVED 意图“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:从我正在进行的调试中添加更多信息: 我用 AppInternal Broadcasts Monitor 看到有广播的时候收到短信却什么都看不到,很奇怪。可能是什么原因? 我安装了其他 SMS 应用程序(环聊、AT&T 消息)- 它们不能抑制广播吗?
更新 2:发现问题但不知道如何解决 我卸载了Google Hangouts (replaces Talk) 应用程序,它工作正常!!! 有什么解决方案吗? (我应该按照 stackoverflow 规则打开一个单独的线程吗?)
更新 3:找到根本原因(当然需要以下帮助,谢谢) 事实证明,由于新的 Google Hangouts App,我需要setPriority(int)。我在Enabling SMS support in Hangouts 2.0 breaks the BroadcastReceiver of SMS_RECEIVED in my app 找到了解决方案
【问题讨论】:
标签: android android-intent sms broadcastreceiver intentfilter