繁体   English   中英

Android MainActivity和BroadcastReceiver

[英]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.

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