0

我有“ComposeActivity”,它在 onClick 之后调用“SendSMS”方法,而不是在 SMS 类中调用 metod。我还注册了两个 BroadcastReceiver:SmsDeliveredReceiver 和 SmsSentReceiver,类似于:https ://stackoverflow.com/a/17164931/1888738 。我如何通知 ComposeActivity,短信已成功发送,并且该活动可以清理一些 EditText,并可能显示带有短信发送与否信息的面包块(以及为什么)?我的代码: http: //pastebin.com/LNRuSeBu

4

2 回答 2

1

如果您在发送或不发送 SMS 消息时有需要处理的接收器。intent.setComponent您可以通过创建一个意图并调用以指定意图应该去哪里来修改两个接收者的 onReceive 以发送和意图到 ComposeActivity 。一些数据告诉 ComposeActivity 尝试发送消息的结果。

更新:

 public void onReceive(Context context, Intent arg1) {
    Intent i = new Intent(action);
    i.setComponent(new ComponentName("com.mypackage.compose","ComposeActivity"));
    switch (getResultCode()) {
        case Activity.RESULT_OK:
            Log.d(getClass().getSimpleName(), "SMS delivered");
            intent.setAction("com.mypackage.compose.SMS_SENT"); // String you define to match the intent-filter of ComposeActivity. 
            break;
        case Activity.RESULT_CANCELED:
            Log.d(getClass().getSimpleName(), "SMS not delivered");
            intent.setAction("com.mypackage.compose.SMS_FAILED"); // String you define to match the intent-filter of ComposeActivity. 

            break;
    }
     startActivity(intent); // you may not necessarily have to call startActivity but call whatever method you need to to deliver the intent.

}

此时,只需通过清单或以编程方式将意图过滤器和接收器添加到您的撰写活动中即可。你的来电。我使用的字符串是组成的,但您可以选择一个现有的意图操作字符串或声明您在意图过滤器中使用的字符串。再由你决定。查看有关向组件发送显式意图的问题(例如带有目标组件 的 Android 显式意图)或查看android 文档也可能会有所帮助。

于 2013-08-03T18:57:08.737 回答
1

好的,经过5个小时的尝试,我已经解决了这个问题:

在 onReceive 中的 BroadcastReceiver 中:

Intent intent = new Intent();
intent.setAction("SOMEACTION");
context.sendBroadcast(intent);

在活动中:

public BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals("SOMEACTION")) {
            Log.d(TAG, "Sent");
        }
    }
};

在 onCreate Activity 中我注册了 BroadcastReceiver:

registerReceiver(receiver, new IntentFilter("SOMEACTION"));

就这样...

于 2013-08-03T23:48:18.923 回答