每次收到新消息时刷新我的 TextView
Refreshing my TextView every time I get a new message
嗨,我是 SO 和 Android 编程的新手。我想在每次收到新消息时刷新我的 TextView,而不关闭应用程序。所以每当有新消息到达时,TextView 将自动刷新并显示新消息。我已经搜索过了,找不到任何关于此的线索。可以吗?
这是我的 MainActivity 代码:
TextView SMSm;
static String phoneNumber1;
static String SMSBody1;
public static void setSmsDetails(String phoneNumber, String SMSBody) {
phoneNumber1 = phoneNumber;
SMSBody1 = SMSBody;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SMSm = (TextView) findViewById(R.id.etSmsBody);
SMSm.setText("sender : " + phoneNumber1 + " " + "\nSMS: " +
SMSBody1);
}
这是我的 BroadcastReciever :
final SmsManager sms = SmsManager.getDefault();
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage
.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage
.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReciver", "senderNum: " + senderNum
+ ", message: " + message);
MainActivity.setSmsDetails(senderNum, message);
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "sender: "
+ senderNum + ", message: " + message, duration);
toast.show();
}
}// bundle
}catch (Exception e) {
Log.e("SmsReciver", "Exception smsReciver" + e);
}
}
每当您想更改文本时再次调用此方法
SMSm.setText("new text");
在 onReceive() 中使用 setText() ,现在您仅在 onCreate 中设置文本,因此它不起作用。
你当前在 onReceive 中显示 toast 的位置再次设置此文本,如下所示
SMSm.setText("sender : " + phoneNumber1 + " " + "\nSMS: " +
SMSBody1);
实现一个在广播接收器
中命名的interface
public interface RefreshSMS {
public void setRefreshMessage(String ph_no, String message);
}
public RefreshSMS refreshSMS;
现在在onReceive()
方法中注册它
refreshSMS.setRefreshMessage(phoneNumber, message);
现在使用此接口
实现您的 activity
public class MainActivity extends AppCompatActivity implements RefreshSMS{
这将 return 您覆盖 activity class 中的方法 setRefreshMessage()
并在该方法中设置文本。
public void setRefreshMessage(String ph_no, String message){
smsText.setText(ph_no+" : "+message);
}
嗨,我是 SO 和 Android 编程的新手。我想在每次收到新消息时刷新我的 TextView,而不关闭应用程序。所以每当有新消息到达时,TextView 将自动刷新并显示新消息。我已经搜索过了,找不到任何关于此的线索。可以吗?
这是我的 MainActivity 代码:
TextView SMSm;
static String phoneNumber1;
static String SMSBody1;
public static void setSmsDetails(String phoneNumber, String SMSBody) {
phoneNumber1 = phoneNumber;
SMSBody1 = SMSBody;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SMSm = (TextView) findViewById(R.id.etSmsBody);
SMSm.setText("sender : " + phoneNumber1 + " " + "\nSMS: " +
SMSBody1);
}
这是我的 BroadcastReciever :
final SmsManager sms = SmsManager.getDefault();
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage
.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage
.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReciver", "senderNum: " + senderNum
+ ", message: " + message);
MainActivity.setSmsDetails(senderNum, message);
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "sender: "
+ senderNum + ", message: " + message, duration);
toast.show();
}
}// bundle
}catch (Exception e) {
Log.e("SmsReciver", "Exception smsReciver" + e);
}
}
每当您想更改文本时再次调用此方法
SMSm.setText("new text");
在 onReceive() 中使用 setText() ,现在您仅在 onCreate 中设置文本,因此它不起作用。
你当前在 onReceive 中显示 toast 的位置再次设置此文本,如下所示
SMSm.setText("sender : " + phoneNumber1 + " " + "\nSMS: " +
SMSBody1);
实现一个在广播接收器
中命名的interface
public interface RefreshSMS {
public void setRefreshMessage(String ph_no, String message);
}
public RefreshSMS refreshSMS;
现在在onReceive()
方法中注册它
refreshSMS.setRefreshMessage(phoneNumber, message);
现在使用此接口
实现您的 activitypublic class MainActivity extends AppCompatActivity implements RefreshSMS{
这将 return 您覆盖 activity class 中的方法 setRefreshMessage()
并在该方法中设置文本。
public void setRefreshMessage(String ph_no, String message){
smsText.setText(ph_no+" : "+message);
}