Sms BroadcastReceiver没有注册

时间:2012-02-01 23:04:29

标签: java android sms broadcastreceiver

  

可能重复:
  Android SMS Receiver not working

我正处于一个简单的应用程序的开始阶段,以拦截来自特定号码的短信。在这一点上,我试图实现的是当onReceive方法被触发时的吐司,但是我没有得到任何东西。

清单

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.*****"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <uses-sdk android:minSdkVersion="8" />

   <application android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver android:name=".Receiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

接收器

public class Receiver extends BroadcastReceiver {

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

     @Override
     public void onReceive(Context context, Intent intent) {    
         Toast.makeText(context, "Received!", Toast.LENGTH_LONG).show();

         if (intent.getAction().equals(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) {
                     Toast.makeText(context, "Received a message!", Toast.LENGTH_LONG).show();
                     //abortBroadcast();
                 }
             }
         }
    }


}

更新1 创建活动并启动应用程序后,接收方已注册。我需要一种让接收器自动注册的方法。应用程序没有任何活动,只有onReceive方法拦截了该消息。这可能吗?也许使用启动完成意图?

更新2 解决了它使用BOOT_COMPLETED接收器启动注册短信接收器的服务。感谢。

1 个答案:

答案 0 :(得分:1)

您的解决方案存在缺陷。它适用于Android 3.0及更早版本。对于Android 3.1,您必须拥有一个用户至少启动一次的活动,才能启用您的应用。