【问题标题】:PendingIntent not working after colsing activity结束活动后 PendingIntent 不起作用
【发布时间】:2014-07-28 17:07:12
【问题描述】:

我正在开发一个在 android 中发送短信的应用程序。

我还需要查看消息是否已送达。我已尝试注册接收器以查找 Delivering SMS ,如果我在发送短信之前不停止活动,它会很好地工作。但是如果我在传递消息之前关闭活动,传递接收器将无法工作。

我该怎么办?

这是我所做的(在我的 Activity 中的一个函数内):

try
{
SmsManager smsManager = SmsManager.getDefault();

String to = "5556";
String body = "Test Message";

String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";


PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,new Intent(DELIVERED), 0);

registerReceiver(new BroadcastReceiver()
{
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        switch (getResultCode())
        {
            case Activity.RESULT_OK:
                Toast.makeText(arg0, "SMS sent", Toast.LENGTH_LONG).show();
                break;
                default:
                Toast.makeText(arg0, "Error", Toast.LENGTH_LONG).show();
                break;
        }
    }
}, new IntentFilter(SENT));


registerReceiver(new BroadcastReceiver(){
    @Override
    public void onReceive(Context arg0, Intent arg1) 
    {
        switch (getResultCode())
        {
            case Activity.RESULT_OK:
                Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_LONG).show();

                break;
            default:
                Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_LONG).show();
                break;                        
        }
    }
}, new IntentFilter(DELIVERED));        

smsManager.sendTextMessage(to.getText().toString(), null, body.getText().toString(), sentPI, deliveredPI);
}
catch(Exception ex)
{
    Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:

    您的BroadcastReceiver 在您的Activity 中动态注册,因此与Activity 的生命周期相关联。要在 Activity 未运行时接收广播,您需要在清单中静态注册 BroadcastReceiver 类。

    请注意,您可以对 Sent 和 Delivered 广播使用相同的 BroadcastReceiver 类。

    【讨论】:

    • 感谢您的回答,我是初学者。有代码示例吗?
    • 工作就像一个魅力,谢谢
    • 顺便说一句,如果我需要在它的名称上注册一个额外的字符串,例如 ("com.mycompany.myapp.SMS_SENT" + id),我该怎么办?
    • 在发送多条消息时使用相同的名称进行操作会导致问题,我对此提出了一个问题:stackoverflow.com/questions/24996638
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多