每次收到新消息时刷新我的TextView

时间:2016-03-18 08:00:40

标签: android broadcastreceiver sms smsmanager

嗨,我是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);
    }

}

3 个答案:

答案 0 :(得分:0)

每当您想要更改文本时再次调用此方法

SMSm.setText("new text");

答案 1 :(得分:0)

在onReceive()中使用setText(),现在只在onCreate中设置文本,因此它不起作用。

目前你在onReceive中展示吐司的地方再次设置此文本,如下所示

SMSm.setText("sender : " + phoneNumber1 + " " + "\nSMS: " +
         SMSBody1);

答案 2 :(得分:0)

实现在广播接收器中命名的一个interface

public interface RefreshSMS {
    public void setRefreshMessage(String ph_no, String message);
}

public RefreshSMS refreshSMS;

现在在onReceive()方法

中注册
refreshSMS.setRefreshMessage(phoneNumber, message);

现在使用此界面实现您的活动

public class MainActivity extends AppCompatActivity implements RefreshSMS{

将返回活动类中的覆盖方法setRefreshMessage(),并在该方法中设置文本。

public void setRefreshMessage(String ph_no, String message){
  smsText.setText(ph_no+" : "+message);
}