我想知道是否有人可以指出我正确的方向。我正在编写Android 4.4应用程序。我有一个服务正在运行侦听从同一服务启动的线程上的连接。如果我运行以下它可以工作:
async Task SendSMSAsync(string TextMessage)
{
await Task.Run(() =>
{
PendingIntent sentIntent = PendingIntent.GetBroadcast(this.context, 0, new Intent("SMS_SENT"), 0);
PendingIntent deliveredIntent = PendingIntent.GetBroadcast(this.context, 0, new Intent("SMS_DELIVERED"), 0);
SmsManager.Default.SendTextMessage(Chris, null, "This is a Test", sentIntent, deliveredIntent);
});
}
但是,如果我将String传递给SendTextMessage方法。我得到了一般失败。
activity.bluetoothSocket.InputStream.Read(buffer, 0, buffer.Length);
string TextMessage = System.Text.Encoding.UTF8.GetString(buffer);
...
SmsManager.Default.SendTextMessage(Chris, null, TextMessage sentIntent, deliveredIntent);
我的字符串只有10个字符。
buffer = System.Text.Encoding.UTF8.GetBytes(activity.DataReceivedString);
activity.writeData();
我找回了正确的字符串。
'Chris'是一个字符串,这是我的硬编码编号,不会改变。
这很奇怪。
答案 0 :(得分:1)
嗯,很奇怪,答案是缓冲区:
private byte[] buffer = new byte[157]; // 160 was supposed to be the limit...
我放下了尺寸:
private byte[] buffer = new byte[70];
现在它有效。
糟糕的文档是混淆的来源:Android.Telephony.SmsManager.SendTextMessage Method