0

我正在尝试收听从包含特定关键字的特定发件人发送的非常特定的 SMS。为此,我创建了一个android.provider.Telephony.SMS_RECEIVED通过清单绑定到的 BroadcastReciever。

如果我发现特定发件人发送包含该关键字的 SMS,我需要从我的应用程序发送 SMS。我通过onRecieve()函数在我的应用程序中做到了这一点。

问题是我想听 SMS_SENT 和 SMS_DELIVERED 事件来了解短信是否成功发送/传递。为此,我正在通过以下方式注册这些接收器

context.registerReceiver(smsSentReciever, new  IntentFilter(Consts.SENT));
            context.registerReceiver(smsDeliveredReciver, new IntentFilter(Consts.DELIVERED));

虽然,我已经实例化了一个单独AsyncTaskonRecieve方法来完成这项工作,但我仍然收到以下错误 BroadcastReceiver components are not allowed to register to receive intents

我应该使用IntentService而不是AsyncTaskfromonRecieve吗?或者

我应该实例化一个IntentServicefromAsyncTask执行onRecieve吗?

4

1 回答 1

3

只需在清单中注册 BroadcastReceiver 以处理所有三个 Intent,并在收到它们时分别处理它们。

AndroidManifest.xml

<receiver android:name=".YourBroadcastReceiver">
    <intent-filter android:priority="999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.mycompany.myapp.SMS_SENT" />
        <action android:name="com.mycompany.myapp.SMS_DELIVERED" />
    </intent-filter>
</receiver>

YourBroadcastReceiver.java

public class YourBroadcastReceiver extends BroadcastReceiver
{
    public static final String ACTION_SMS_RECEIVED =
    "android.provider.Telephony.SMS_RECEIVED";
    public static final String ACTION_SMS_SENT = "com.mycompany.myapp.SMS_SENT";
    public static final String ACTION_SMS_DELIVERED = "com.mycompany.myapp.SMS_DELIVERED";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();

        if (action.equals(ACTION_SMS_RECEIVED))
        {

        }
        // etc...
    }
}

注意:SMS_RECEIVED优先级设置为 999,因此我的应用程序可以在其他应用程序之前处理消息,例如平台 SMS/MMS 应用程序。

于 2013-10-16T13:48:51.413 回答