Android - 广播接收器没有被解雇

时间:2011-08-06 12:53:49

标签: java android sms broadcastreceiver

我知道这已经被问到了ALOT,但是我已经在网上搜了几个小时了,我甚至重复使用了我以前的一些代码来接收短信'我得到了......没什么。

所以,这里,基本应用程序接收短信但应用程序永远不会收到意图。我认为如果文本是从同一部手机发送的,那么意图可能会被忽略,但似乎并非如此,因为其他应用程序会正确地接收文本。

这是我的清单:

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.encima.smsreceiver"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity" android:label="@string/app_name">
                        <intent-filter>
                                <action android:name="android.intent.action.MAIN" />
                                <category android:name="android.intent.category.LAUNCHER" />
                        </intent-filter>
         </activity>
         <receiver android:name=".MessageReceiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>
    </application>
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest>

而且,这里是接收器,这里似乎没什么新东西,所以我不知道问题是什么:

package com.encima.smsreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class MessageReceiver extends BroadcastReceiver {

    private static final String TAG = "Message recieved";
    @Override
    public void onReceive(Context context, Intent intent) {
         Bundle pudsBundle = intent.getExtras();
         Object[] pdus = (Object[]) pudsBundle.get("pdus");
         SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]);    
         Log.i(TAG,  messages.getMessageBody());
         Toast.makeText(context, "SMS Received : "+messages.getMessageBody(),
         Toast.LENGTH_LONG).show();
    }

}

我正在使用的调试手机正在运行2.2.2我运行的其他应用程序可以检测短信,包括我自己的一些。

对此有任何见解将不胜感激!

由于

2 个答案:

答案 0 :(得分:2)

因为SMS广播意图是由发送的 Context.sendOrderedBroadcast(...), 如果任何其他应用注册BroadcastReceiver并调用abortBroadcast,则其他接收者将无法获得广播。

要提高应用接收广播的概率,请创建一个IntentFilter,使用IntentFilter.setPriority

答案 1 :(得分:0)

我不知道这是不是你的问题,但你应该明确地试试这个:

而不是".MessageReceiver"android:name = "com.encima.smsreceiver.MessageReceiver"

当有些事情没有被召唤时,这可以解决我多次锻炼的问题。