gpt4 book ai didi

Android - 发送的文本总是返回 RESULT OK

转载 作者:行者123 更新时间:2023-11-29 21:05:26 26 4
gpt4 key购买 nike

我的一些代码有问题,需要一些帮助。我这里的代码发送了一个文本...但我遇到的问题是接收文本的代码总是返回 RESULT_OK...我可以关闭电话/尝试一个我知道不是真实的号码并且它将永远返回 RESULT_OK... 任何人都可以在正确的方向上帮助我,有什么明显的错误吗?我使用了错误的代码吗?任何帮助都会很棒!谢谢

收到短信时的代码:

Blockquote

Globals.GlobalContext.registerReceiver(new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent arg1)
{
switch (getResultCode())
{
case Activity.RESULT_OK:
Globals.UpdateStatus("Message was delivered");
Bundle extras = arg1.getExtras();
if (extras != null)
{
arg1.getStringExtra("smsNumber");
String number = arg1.getStringExtra("smsNumber");
Globals.UpdateStatus("Delivered to :" + number);
arg1 = null;
}
else
{
Globals.UpdateStatus("Sent to a number that I don't know :(");
}

break;
case Activity.RESULT_CANCELED:
Globals.UpdateStatus("Message was NOT delivered");
break;
}

}

}, new IntentFilter(DELIVERED));

发送短信的代码:

public void SendTextMessageDelivery(String number, String Message)
{
if ((CheckValidPhoneNumber(number)) && (Message.length() != 0))
{
if (!CheckSMSManager())
{
StartSMSManager(true);
}



//sent
PendingIntent sentPI = PendingIntent.getBroadcast(Globals.GlobalContext, 0, new Intent(SENT), 0);
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
sentIntents.add(sentPI);

//delivered
Intent DeliveredIntent = new Intent(DELIVERED);
DeliveredIntent.putExtra("smsNumber", number);

PendingIntent DeliveredPI = PendingIntent.getBroadcast(Globals.GlobalContext, 0, DeliveredIntent, PendingIntent.FLAG_UPDATE_CURRENT );
ArrayList<PendingIntent> DeliveredIntents = new ArrayList<PendingIntent>();
DeliveredIntents.add(DeliveredPI);

ArrayList<String> mSMSMessage = smsManager.divideMessage(Message);
for (int i = 0; i < mSMSMessage.size(); i++)
{

}
smsManager.sendMultipartTextMessage(number, null, mSMSMessage, sentIntents, DeliveredIntents);
}
else
{
if (Message.length() != 0)
{
Globals.UpdateStatus("Message was not long enough!");
}
else
{
Globals.UpdateStatus("Failed to Validate Mobile Number");
}
}
}

最佳答案

有几个原因可能导致您得到不正确的结果。首先也是最重要的:检查 getResultCode() 不是确定交付成功或失败的正确方法。尽管许多示例使用此方法,但真正的结果将在从服务中心返回并传递到接收器的 SMS 状态消息上。

交给您的接收器的 Intent 将附加一个单独的 PDU 作为附加。必须从中创建一个 SmsMessage,并且从其 getStatus() 方法返回的值将是实际结果。例如,您的交付结果 Receiver 可能类似于以下内容(尽管最好将额外的部分交给 Service 进行处理)。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.provider.Telephony;
import android.telephony.SmsMessage;

public class DeliveryResultReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
SmsMessage sms = null;

byte[] pdu = intent.getByteArrayExtra("pdu");
String format = intent.getStringExtra("format");

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && format != null) {
sms = SmsMessage.createFromPdu(pdu, format);
}
else {
sms = SmsMessage.createFromPdu(pdu);
}

int statusCode = sms.getStatus();
String status = translateDeliveryStatus(statusCode);
...
}

String translateDeliveryStatus(int statusCode) {
switch (statusCode) {
case Telephony.Sms.STATUS_COMPLETE:
return "Sms.STATUS_COMPLETE";
case Telephony.Sms.STATUS_FAILED:
return "Sms.STATUS_FAILED";
case Telephony.Sms.STATUS_PENDING:
return "Sms.STATUS_PENDING";
case Telephony.Sms.STATUS_NONE:
return "Sms.STATUS_NONE";
default:
return "Unknown status code";
}
}
}

如果实现此操作后,您仍然收到误报,则可能是由于您的承运人如何定义“已送达”。交付可能并不意味着交付到目标设备。确切的行为因提供商而异,甚至在服务中心级别也是如此。以下可能不是来自 best source , 但正如我所看到的那样简洁:

Some providers allow users to request delivery reports, either via the SMS settings of most modern phones, or by prefixing each message with *0# or *N#. However, the exact meaning of confirmations varies from reaching the network, to being queued for sending, to being sent, to receiving a confirmation of receipt from the target device, and users are often not informed of the specific type of success being reported.

关于Android - 发送的文本总是返回 RESULT OK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24734757/

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