我初学者在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;
}
}
}
答案 0 :(得分:0)
在我看来,你有几个选择。
最简单的方法是将您的数据收集类放在Activity中的一个线程中,在这里您可以直接发布到UI。
其次是将您的数据收集代码放入Android服务并绑定到服务。您可以使用回调创建接口并将数据返回到您的活动。这个方法有很多接口和绑定代码。
我会将我的数据收集代码放在Service或IntentService的后台线程中。然后通过[EventBus] [1]发布数据更新。聆听您的活动中的事件。很干净,很容易。