[英]Android BroadcastReceiver onReceive Update TextView in MainActivity
[英]Android MainActivity and BroadcastReceiver
尝试从不同类访问对象时遇到问题。 我在一个Android项目上,我已经从MainActivity类完成了一个套接字连接,该类扩展了Activity。 然后,我制作了另一个名为SmsReceiver的类,该类扩展了BroadcastReceiver,因此我可以获取发送到手机(模拟器)的消息。 现在,我需要SmsReceiver类来使用MainActivity类中的outputstream对象,但我不知道如何实现它。 我无法创建MainActivity的新实例。
我可以以某种方式将outputstream对象发送到SmsReceiver类吗? 希望你们中的一些人给了一些提示,谢谢!
好的,现在我去了界面解决方案,但是我又被卡住了!
这是我的课程:
主要活动:
public class MainActivity extends Activity implements MainInterface
{
try {
out = new PrintWriter(clientSocket.getOutputStream());
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (IOException ex) {
System.err.println("Error in creating Streams:" + ex.toString());
return;
}
public PrintWriter getOutputStream() {
return out;
}
}
MainInterface:
public interface MainInterface {
public PrintWriter getOutputStream();
}
SmsReceiver:
public class SmsReceiver extends BroadcastReceiver{
MainInterface mainInterface = new MainActivity(); ///// <------
PrintWriter out; //// <--------
@Override
public void onReceive(Context context, Intent intent) {
mainInterface.getOutputStream(); ////// <------------
// Retrieves a map of extended data from the 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 phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
out.println("senderNum: "+ senderNum + "; message: " + message);
out.flush(); /// these two lines
}
}
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
}
}
由于某种原因,我通过接口获得的PrintWriter为null ,而桌面上的inputstream(在out.println()时应该接收消息的程序)甚至都没有得到消息,只是在in.readLine() 。 我是用错误的方式实例化接口还是发生了什么事情?
logcat错误打印为: 09-15 14:13:55.880:E / SmsReceiver(1361):异常smsReceiverjava.lang.NullPointerException
您必须在MainActivity中为BroadcastReceiver类设置一个意图,为什么不使用此BroadcastReceiver的意图发送数据,这比我之前看到代码之前所问的方法要容易得多。
您将以广播接收者的名义接收的数据,请检查此解决方案是否有效。 但是,您需要解决一种通过意图发送PrintWriter对象的方法。
另一个解决方案可以是使用观察者和订户模式,您可以在网上找到多个相同的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.