[英]Running listener in a background service in android
每當有人在上面寫入數據時,我都需要從USB串行端口接收數據。
為此,我創建了一個具有onread偵聽器的服務,該偵聽器會在數據可用時從串行端口讀取數據。
我將在活動中添加接收到的數據的textview。 但是我什么也看不到。
我的服務正在運行,但無法接收任何數據。
下面是我的服務類代碼。
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);
}
};
您可以在可運行的getData中設置讀取偵聽器。 這意味着偵聽器僅在getData運行時才有效。 由於getData立即終止,因此偵聽器將永遠不會有執行的機會。
將偵聽器移出getData,或者讓getData是與您的服務壽命相同的長時間運行的線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.