0
我在不同的類中有我的MainActivity,ConnectThread和ConnectedThread。Android將Thread中的數據從單獨的java類發送到UI線程
我正在偵聽來自ConnectedThread中Bluetoothmodule的大量數據。
我有Broadcastreciever在我的主線程像這樣:
final BroadcastReceiver bReciever = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
String message = intent.getStringExtra("data");
if(BluetoothDevice.ACTION_FOUND.equals(action)){ // Bluetooth discovery result found
BTArrayAdapter_found_filter.clear(); //Remove Duplicates
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
BTArrayAdapter_found.add(device.getName()+"\n"+device.getAddress());
BTArrayAdapter_found.notifyDataSetChanged();
for(int i = 0;i< BTArrayAdapter_found.getCount();i++){ // Iterate original Arrayadapter for filtering
String filter = "RCD";
if(BTArrayAdapter_found.getItem(i).toString().toLowerCase().contains(filter.toLowerCase())){
BTArrayAdapter_found_filter.add(BTArrayAdapter_found.getItem(i));
BTArrayAdapter_found_filter.notifyDataSetChanged();
}
}
}
if(message!=null)
textview_terminal.setText(message);
}
};
我會聽消息,並把它傳遞給一個TextView。另一個只是藍牙部分,這裏不相關。
我有這樣的ConnectedThread的意圖:
public void sendData(){
Intent sendDataIntent = new Intent("SendData_EVENT");
sendDataIntent.putExtra("data",passData);
LocalBroadcastManager.getInstance().sendBroadcast(sendDataIntent);
}
但由於該線程有一個活動沒有聯繫的Broadcastmanagers的getInstance不起作用。
我試圖用這個例子:LINK
我有很多的例子來看看,我不認爲處理程序是對我最好的方法。
我怎樣才能成功地從我的後臺線程發送數據?
通過發送發送getApplicationContext()來ConnectedThread構造函數和傳遞,爲的getInstance(上下文)解決
你註冊解決** BroadcastReceiver **? – Alexander
是的,我有LocalBroadcastManager.getInstance(this).registerReceiver(bReciever,new IntentFilter(「SendData_EVENT」));我的問題是LocalBroadcastmanager.getinstante()我不能在那裏放置任何參數,因爲ConnectedThread只是一個沒有上下文或活動的線程,如果我理解正確的話。 – VikingPingvin
可能是您可以將邏輯從**線程**移動到**服務**。它可以幫助你。不要忘記服務在UI線程中默認工作。 – Alexander