gpt4 book ai didi

java - 从 Internet 服务发送短信 - 无法接收广播以检查是否已发送短信

转载 作者:行者123 更新时间:2023-11-30 00:13:15 25 4
gpt4 key购买 nike

我的应用是关于地理围栏的。当触发地理围栏时,我需要发送短信。

它的工作几乎完美,但我无法接收广播来检查是否已发送 SMS。我会解释我自己:

当用户进入地理围栏时,会调用地理围栏 Intent 服务,并发送短信。它就像一个魅力,但我需要确定 SMS 是否已发送,或者是否有任何问题(即没有信号)并尝试再次发送。

所以,首先我尝试以这种方式发送短信:

    private void sendsms() {

String SMS_SENT = "SMS_SENT";
final PendingIntent sentPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);

// check if SMS has been sent
smsSentReceiver =new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Log.e("SMS", "SMS sent successfully");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.e("SMS","Generic failure cause");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.e("SMS", "Service is currently unavailable");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Log.e("SMS", "No pdu provided");
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.e("SMS", "Radio was explicitly turned off");
break;
}
}
};


registerReceiver(smsSentReceiver, new Intent());

// Get the default instance of SmsManager
// Send a text based SMS
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(towhom, null, customtxt, sentPendingIntent, null);

这有效,但发送短信后没有任何反应,根本没有日志。

然后我尝试了另一种方式,创建接收器并放入 list :

private smsSentReceiver smsSentReceiver;

private void sendsms() {

final PendingIntent sentPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);

smsSentReceiver = new smsSentReceiver();
registerReceiver(smsSentReceiver, new IntentFilter());

// Get the default instance of SmsManager
// Send a text based SMS
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(towhom, null, customtxt, sentPendingIntent, null);

这是smsSentReceiver.java

public class smsSentReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Log.e("SMS", "SMS sent successfully");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.e("SMS","Generic failure cause");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.e("SMS", "Service is currently unavailable");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Log.e("SMS", "No pdu provided");
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.e("SMS", "Radio was explicitly turned off");
break;
}
}
}

和 list :

<receiver
android:name=".smsSentReceiver"
android:enabled="true"
>

</receiver>

根本没有关于短信状态的日志...

关于为什么我没有收到短信状态有什么想法吗?

PS: 只在模拟器上测试过

编辑:

根据@Mike M 的说法,我最后尝试的是这个。评论:

private void sendsms() {

final PendingIntent sentPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, smsSentReceiver.class), PendingIntent.FLAG_CANCEL_CURRENT);

SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(towhom, null, customtxt, sentPendingIntent, null);

还是什么都没有...

最佳答案

IntentService 将在完成工作后立即自行停止,并且在其上动态注册的任何 Receiver 也会消失。在您的第一个 fragment 中,当广播最终发送时,接收者可能无法接收广播,因为 sendTextMessage() 调用将立即返回,而 PendingIntent 将被异步触发。

静态注册 Receiver 类,就像您在第二个代码 fragment 中所做的那样,即使在 IntentService 终止后,Receiver 也可以接收广播,因为生成的 Receiver 实例不会被绑定(bind)给它。但是,您用于 PendingIntentIntent 没有正确定位 Receiver 类。将其更改为 new Intent(this, smsSentReceiver.class)

最后,logs with certain tags are suppressed ,出于某种原因,"SMS" 标签(确切地)就是其中之一。将该标签更改为此处未列出的内容;例如,“smsSentReceiver”

关于java - 从 Internet 服务发送短信 - 无法接收广播以检查是否已发送短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47798576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com