繁体   English   中英

如何从其他非活动类Android中的活动中插入TextView?

[英]How to insert TextView in Activity from other non activity class Android?

我需要从IncomingSms (非活动类)设置Main3Activity (活动类)的TextView对象。

public class IncomingSms extends BroadcastReceiver {

    final SmsManager sms = SmsManager.getDefault();

    @Override
    public void onReceive(Context context, Intent intent) {
         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 senderNum = currentMessage.getDisplayOriginatingAddress();
                    String message = currentMessage.getDisplayMessageBody();
                    if (message.equalsIgnoreCase("FIRE DETECTED")) {
                        //Problem start here: I cant able to set TextView object of Main3Activity
                        Main3Activity main3Activity = new Main3Activity();
                        TextView tv = (TextView) main3Activity.findViewById(R.id.firealert);
                        tv.setText(message);
                        //Problem end here
                        Log.i("SmsReceived", "senderNum: " + senderNum + "; message: " + message);
                        int duration = Toast.LENGTH_LONG;
                        Toast toast = Toast.makeText(context, message, duration);
                        toast.show();
                    }
                }
            }
        } catch(Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" + e);
        }
    }
}

您不能像这样创建活动实例。

解决方案:1.在您的活动中创建一个广播接收器,并注册一个自定义意图。 2.从您的短信接收器发送自定义的广播意图。 因此基本上可以到达活动接收者,然后您可以在那里简单地更新文本。

如果您的活动没有开始,只需创建一个活动意图,然后将短信文本作为附加意图的一部分传递。

创建一个接口类,将其另存为java类,然后

public interface SmsListener {
            public void messageReceived(String messageText);
    }

final SmsManager sms = SmsManager.getDefault();
private static SmsListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
    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 senderNum = currentMessage.getDisplayOriginatingAddress();
                String message = currentMessage.getDisplayMessageBody();
                if (message.equalsIgnoreCase("FIRE DETECTED") ){
                    mListener.messageReceived(message); //add this
                    Log.i("SmsReceived", "senderNum: "+ senderNum + "; message: " + message);
                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context, message, duration);
                    toast.show();
                }
            }
        }
    } catch (Exception e) {
        Log.e("SmsReceiver", "Exception smsReceiver" +e);
    }
}
public static void bindListener(SmsListener listener) {
        mListener = listener;
    }

然后在您的Main3Activity onCreate方法中

TextView tv=(TextView) main3Activity.findViewById(R.id.firealert);


SmsReceiver.bindListener(new SmsListener() {
                @Override
                public void messageReceived(String messageText) {
                    Log.d("Text",messageText);
                     tv.setText(messageText);
                }
            });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM