SMS_RECEIVED onReceive android 2.3.5无法触发

最近我一直在为这个问题感到困惑,在2.3.5之前,这似乎工作正常(在我的同事设备上)。 然而,在我的现在它永远不会触发。

我已经剥离了代码,并制作了一个非常简单的测试应用程序来查看正在发生的事情。 基本上onReceive代码似乎永远不会触发,即使adb / logcat似乎确实显示了BroadcastReveiver的寄存器确实发生了。

这是我去过的简单代码:

                   

然后:

 package com.broadcasttech.testsmsreceive; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; public class TestSMSReceiveActivity extends Activity { private BroadcastReceiver receiver; private static final String TAG = "TestSMSApp"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i(TAG, " App has started up"); IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); Log.i(TAG, " Filter SMS_RECEIVED has been added"); //Extends BroadcastReceiver receiver = new mysmstestcall(); registerReceiver(receiver,filter); Log.i(TAG, " registerReceiver sorted"); } //Also, to save headaches later @Override protected void onDestroy() { Log.i(TAG, " unregistering Receiver"); unregisterReceiver(receiver); Log.i(TAG, " done"); } } 

最后

 package com.broadcasttech.testsmsreceive; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class mysmstestcall extends BroadcastReceiver { private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; private static final String TAG = "TestSMSApp"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "Intent recieved: " + intent.getAction()); if (intent.getAction() == SMS_RECEIVED) { //any action you want here.. Log.i(TAG, "SMS received has triggered"); } } } 

所以它是一个相当简单的应用程序,只需记录并告诉我何时触发BroadcastReceiver,但它根本不会触发。

任何人都可以建议什么是错的,我检查了各种教程,检查,因为我知道IceCreamSandwich是不同的,但也尝试合并这些修复,这也没有什么区别。

提前致谢!

主要问题是“mysmstestcall”中的这一行是错误的:

if (intent.getAction() == SMS_RECEIVED)

应改为:

 if (intent.getAction().equals(SMS_RECEIVED)) 

你有两个接收者的原因吗? 你有一个程序员监听器 ,你有一个XML监听器

编程

 filter.addAction("android.provider.Telephony.SMS_RECEIVED"); Log.i(TAG, " Filter SMS_RECEIVED has been added"); //Extends BroadcastReceiver receiver = new mysmstestcall(); 

XML侦听器

     

你确定要这两个吗? 如果你有两个,你将收到相同的广播2次……

至于我看到的另一个问题是这一行

 if (intent.getAction() == SMS_RECEIVED) 

在比较字符串时,你不要像这样比较它们,而是你有这样的东西:

 if (intent.getAction().equalsIgnoreCase(SMS_RECEIVED)) 

我有过一次。 这可能是网络的问题。 这些是我的问题和答案 。 您可以添加发送意图并捕获结果代码。 就我而言,它是RESULT_ERROR_GENERIC_FAILURE 。 我试图找到其他解决方案几个月,但没有运气,所以我接受了,即使我不想:-(

 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 SmsBroadcastReceiver extends BroadcastReceiver{ public static final String SMS_BUNDLE = "pdus"; @Override public void onReceive(Context context, Intent intent) { Bundle intentExtras = intent.getExtras(); if (intentExtras != null) { Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); String smsMessageStr = ""; for (int i = 0; i < sms.length; ++i) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); String smsBody = smsMessage.getMessageBody().toString(); String address = smsMessage.getOriginatingAddress(); smsMessageStr += "SMS From: " + address + "\n"; smsMessageStr += smsBody + "\n"; } Toast.makeText(context, "A new message is added to the SMS List!!!\n"+smsMessageStr, Toast.LENGTH_SHORT).show(); //this will update the UI with message InboxMain inst = InboxMain.instance(); inst.updateList(smsMessageStr); } } } manifest::      permission::