每次收到新消息时刷新我的 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);
}