2013-08-02 95 views
1

我已经写了一个短信接收器捕捉收入短信,一切看起来不错,但它不 作品,并没有收到接收器的SMS收入。这是代码和清单内容。 正如我记得我有同样的应用程序写在android 2.3工作正常,但此代码正在运行android 4.x这是无法正常工作。问题是什么 ?这取决于android 4.x的安全问题吗?Android广播接收器不收入收入短信

清单:

<receiver android:name="SmsReceiver"> 
     <intent-filter android:priority="100"> 
      <action android:name="android.provider.telephony.SMS_RECEIVED"/> 
     </intent-filter> 
    </receiver> 

Java代码:

public class SmsReceiver extends BroadcastReceiver { 

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    Logger.i("INCOMMING SMS..."); 
    if (action == SMS_RECEIVED) { 
     Bundle bundle = intent.getExtras(); 
     if (bundle != null) { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      final SmsMessage[] messages = new SmsMessage[pdus.length]; 
      for (int i = 0; i < pdus.length; i++) { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      } 
      if (messages.length > -1) { 
       String sendr = messages[0].getOriginatingAddress(); 
       Logger.i(sendr); 
      } 
     } 
    } 
} 


} 
+1

阅读http://stackoverflow.com/questions/8030777/android-provider-telephony-sms-received-not-working-on-my-device-htc-wildfire –

+0

http://stackoverflow.com/questions/ 8319987 /短信接收的 - 不工作-ON-冰淇淋三明治 –

回答

2

我有同样的问题,我已经通过增加两个动作来固定它清单已经注册了接收者看起来就像这样:

<receiver android:name=".SmsReceiver"> 
    <intent-filter android:priority="100"> 
    <action android:name="android.intent.action.PHONE_STATE"/> 
     <action android:name="android.provider.telephony.SMS_RECEIVED"/> 
     <action android:name="com.your.package.android.action.broadcast"/> 
    </intent-filter> 
    </receiver> 

还添加权限:

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

与弦乐能比较不使用等于运算符,但等于方法,而不是(注。 equalsIgnoreCase()应该更好地为您)

所以它会像:

if(SMS_RECEIVED.equalsIgnoreCase(action)) 
{ 
//continue 
} 

希望它能帮助。

0

我和你有同样的问题,经过对网络的大量研究,我发现了这个问题。您的应用程序未启动,仿真程序控制不会发送选项--include-stopped-packages,因为adb命令可以执行此操作。这是Android 3.x中引入的一项功能。

因此,您的接收器从未接收广播,因为您的应用程序未启动。 要首先启动它,从您的系统打开控制台,然后输入以下命令:

*adb -e shell am broadcast -a android.provider.Telephony.SMS_RECEIVED --include-stopped-packages* 

你BroadcastReceveiver收到一个空的短信。

执行此命令后,您的过程将显示在设备视图中,您可以从模拟器控件发送SMS。