从班级到活动不断传递数据

时间:2014-12-14 17:02:08

标签: java android bluetooth

我初学者在android.Goal我的项目是从蓝牙接收的连续数据绘制图表,这是由x,y,z值组成的加速度计数据。现在我想将这些值传递给另一个活动,该活动将绘制来自我已经使用Blueterm app源代码并将其扩展为提取accel x,y,z值。我怀疑intent是否会起作用或者我需要使用其他方法吗? 下面是连续接收数据的线程类:

    private class ConnectedThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;


    public ConnectedThread(BluetoothSocket socket) {
        Log.d(TAG, "create ConnectedThread");
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        // Get the BluetoothSocket input and output streams
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            Log.e(TAG, "temp sockets not created", e);
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
    }

    public void run() {
        Log.i(TAG, "BEGIN mConnectedThread");
        byte[] buffer = new byte[128];
        int bytes;

        // Keep listening to the InputStream while connected
        while (true) {
            try {

                // Read from the InputStream
                bytes = mmInStream.read(buffer);
                int buflen=buffer.length;
                String str = new String(buffer, "UTF-8"); // prints character
                Log.d("Data Transmitted", str);
                int slen=str.length();
                String sl=String.valueOf(slen);
                Log.d("String length",sl);
                int spaceIndex = str.indexOf(" ");
                if (spaceIndex != -1)
                {
                    str = str.substring(0, spaceIndex);
                }
              //  Log.d("Data Edited", str);
                boolean v1=str.contains("a");                   
                boolean v2=str.contains("b");
                boolean v3=str.contains("c");
                boolean v4=str.contains("d");

                int count1 = str.length() - str.replace("a", "").length();
                int count2 = str.length() - str.replace("b", "").length();
                int count3 = str.length() - str.replace("c", "").length();
                int count4 = str.length() - str.replace("d", "").length();
                int count5 = str.length() - str.replace("e", "").length();
                int count6 = str.length() - str.replace("f", "").length();


                if(v1==true && v2==true && v3==true && v4==true && count1==1 && count2==1 && count3==1 && count4==1 && count5==1 && count6==1){
                int v= str.indexOf("a");
                int r= str.indexOf("b");
                int s= str.indexOf("c");
                int k= str.indexOf("d");

               // System.out.println(v);
              //  System.out.println(r);
               // System.out.println(s);
              //  System.out.println(k);
               if(v<r && r<s && s<k){
                String op1=str.substring(str.indexOf("a")+1, str.indexOf("b"));
                double value1 = Double.parseDouble(op1);
                Log.d("Accel-X", op1);
                System.out.print(value1);
                String op2=str.substring(str.indexOf("b")+1, str.indexOf("c"));
                double value2 = Double.parseDouble(op2);
                Log.d("Accel-Y", op2);
                System.out.print(value2);
                String op3=str.substring(str.indexOf("c")+1, str.indexOf("d"));
                double value3 = Double.parseDouble(op3);
                Log.d("Accel-Z", op3);
                System.out.print(value3);
              //  mEmulatorView.write(buffer, bytes);
             //   seriesX.add(new GraphViewData(dataCount, sensorX));

                }
                else{

                //mEmulatorView.write(buffer, bytes);
                }
                // Send the obtained bytes to the UI Activity
                //mHandler.obtainMessage(BlueTerm.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
            }} catch (IOException e) {
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

在我看来,你有几个选择。

最简单的方法是将您的数据收集类放在Activity中的一个线程中,在这里您可以直接发布到UI。

其次是将您的数据收集代码放入Android服务并绑定到服务。您可以使用回调创建接口并将数据返回到您的活动。这个方法有很多接口和绑定代码。

我会将我的数据收集代码放在Service或IntentService的后台线程中。然后通过[EventBus] [1]发布数据更新。聆听您的活动中的事件。很干净,很容易。