如何将数据从后台进程传递到另一个活动

时间:2013-12-09 05:09:49

标签: android background bluetooth real-time

我可以从主要活动中将数据保存在屏幕上的变量sbprint中。我从缓冲蓝牙数据的后台活动得到的变量sbprint。我想将屏幕上显示的数据记录到另一个类。 问题是我不能使用serializable,因为数据总是从我的蓝牙模块实时流式传输。代码基于here

我使用处理程序从缓冲的数据更新我的UI 注意:我在处理程序内获取共享首选项(这在MainActivity.java中)

h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                case RECIEVE_MESSAGE:                                                   // if receive massage
                    byte[] readBuf = (byte[]) msg.obj;
                    String strIncom = new String(readBuf, 0, msg.arg1);                 // create string from bytes array
                    sb.append(strIncom);                                                // append string
                    int endOfLineIndex = sb.indexOf("\r\n");                            // determine the end-of-line
                    if (endOfLineIndex > 0) {                                           // if end-of-line,
                        String sbprint = sb.substring(0, endOfLineIndex);               // extract string
                        sb.delete(0, sb.length());                                      // and clear
                        txtArduino.setText("Data from Arduino: " + sbprint);            // update TextView

                        SharedPreferences logPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
                        SharedPreferences.Editor editor = logPreferences.edit();
                        String textLog = txtArduino.getText().toString();
                        editor.putString("log", textLog);
                        editor.commit();

                    }
                    //Log.d(TAG, "...String:"+ sb.toString() +  "Byte:" + msg.arg1 + "...");
                    break;
                }
            };
        };

h Handler根据此命令中的蓝牙文档从ConnectedThread类中获取消息对象,

h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();     // Send to message queue Handler

我的问题是,如何使用上述处理程序将变量sbprint传递到另一个类的新屏幕中。

这是我如何从另一个传递的数据中接收数据。我通过获取建议的共享首选项来传递变量缓冲区中的数据

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_datalog);

        tvDatalog = (TextView) findViewById(R.id.tvDatalog);

        SharedPreferences logPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        String text = logPreferences.getString("log", "null");
        tvDatalog.setText(text+"\r\n");
    }

注意: 我从我的MainActivity获取数据,但看起来我的asynctask在我的MainActivity中工作,当屏幕更改为另一个类时停止。如何使我的背景活动也适用于这两个类。我的意思是每当我将屏幕彼此改变时,背景活动始终有效。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可能想要使用界面。您可以在Activity中定义包含Handler的界面。然后,您可以在所需的Class

中实现该接口