【发布时间】:2015-01-31 02:45:15
【问题描述】:
我一直在尝试创建一个简单的应用程序,它将 SMS 发送到信息网关,并且还能够在应用程序中显示收到的有关所请求信息的 SMS。
前半部分我猜对了,但后半部分缺少一些东西,即接收短信。我已经成功地能够使用 mThis 访问另一个类的 TextView,但我无法获得完整的消息,只有一小段消息。
这里有几个截图让你理解:
在这里,我正在对 MJ 进行 Wikipedia 搜索,一旦完成,就会向我发送一条 Wiki 文章文本版本的消息。
这是我从网关收到的消息,一篇关于我最喜欢的艺术家的简短而甜蜜的文章。
但这就是我得到的……整个消息的缩短版本,有时甚至是不完整的版本,这对于某些搜索没有意义。
这是我在 ReceiveMessage.java 上的代码,它是允许我接收和显示 SMS 的主类文件。
package com.phoenix.omnisurf;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class ReceiveMessage extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "SMSBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[])bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
if (messages.length > -1) {
Surf.mThis.messageContainer.setText(messages[0].getDisplayMessageBody());
}
}
}
}
}
这是我的 activity_surf.xml 包含的内容,主布局具有显示收到的消息的 messageContainer TextView。 (只是一个 sn-p)
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/messageContainer"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:padding="20dp"
android:layout_below="@+id/btnSurf" />
请帮我在应用程序上显示完整的消息,我真的很感激。非常感谢!
【问题讨论】:
-
这只是一个猜测,但我敢打赌,消息正在被拆分,因为它的长度超过了 140 个字符,这是文本消息的标准长度。你需要得到下半场。
-
@bwoogie 你是对的,我在发布这个问题后就意识到了这一点。我现在已经为我自己的问题添加了一个有效的答案,请查看它并让我知道这是否是执行它的正确方法,或者是否有任何其他简化的方法来处理多个消息块。谢谢。
标签: android android-intent textview sms broadcastreceiver