每当有数据写入usb串口时,我都需要从usb串口接收数据。
为此,我创建了一个具有onread侦听器的服务,该侦听器在数据可用时从串行端口读取数据。
我用我的活动中收到的数据追加了一个文本视图。但我什么也看不见。
我的服务正在运行,但无法接收任何数据。
下面是我的服务类代码。
public class BroadcastService extends Service {
private static final String TAG = "BroadcastService";
public static final String BROADCAST_ACTION = "com.example.flowtest.displayevent";
private final Handler handler = new Handler();
// DatabaseHandle db = new DatabaseHandle(this);
Intent intent;
int counter = 0;
int i = 0, flag = 0;
String d = "a";
byte[] buf = new byte[5];
byte[] start = new byte[21];
byte[] rbuf;// updated
String str;
Physicaloid mPhysicaloid = new Physicaloid(this);
@Override
public void onCreate() {
super.onCreate();
intent = new Intent(BROADCAST_ACTION);
// mPhysicaloid.open();
}
@Override
public void onStart(Intent intent, int startId) {
mPhysicaloid.open();
handler.removeCallbacks(getdata);
handler.post(getdata);
}
private Runnable getdata = new Runnable() {
public void run() {
Log.d("service", "in service");
mPhysicaloid.addReadListener(new ReadLisener() {
@Override
public void onRead(int size) {
// TODO Auto-generated method stub
byte[] rbuf = new byte[size];
mPhysicaloid.read(rbuf, size);
try {
str = new String(rbuf, "UTF-8");
if (str.equals(null)) {
flag = 0;
intent.putExtra("inputString", "no luck");
sendBroadcast(intent);
} else {
flag = 1;
intent.putExtra("inputString", str);
sendBroadcast(intent);
}
// sendBroadcast(intent);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
};
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
// handler.removeCallbacks(sendUpdatesToUI);
super.onDestroy();
}
}现在我的活动,
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateUI(intent);
}
private void updateUI(Intent intent) {
// TODO Auto-generated method stub
String data = intent.getStringExtra("inputString").toString();
if(data.equals("NORMAL")){
i = new Intent(MainActivity.this,ModeScreenActivity.class);
startActivity(i);
finish();
}
else{
}
tvAppend(tv1,data);
}
}; 发布于 2014-05-09 23:42:32
您可以在getData runnable中设置您的读取侦听器。这意味着侦听器仅在getData运行时有效。由于getData会立即终止,因此侦听器永远没有机会执行。
要么将侦听器移出getData,要么让getData成为与您的服务具有相同生命周期的长时间运行的线程。
https://stackoverflow.com/questions/20541669
复制相似问题