My foreground service create threads and these thread needs to have context.
So I pass it to like: MyThread mt = new MyThread(this)
at Service.
and The MyThread save its context parameter by its own member value, like :
private Context serviceContext = parameterContext
in Thread.
Is this possible? or have some hazard?
precise code:
in Service:
(...)
BleTalker bt = new BleTalker(devNo,bdv,bleHandler,this);
bt.start();
in BleTalker Thread class:
public BleTalker(int dNum, BluetoothDevice device, Handler bh,Context c){
this.devNumber = dNum;
myDevice = device;
bleHandler = bh;
serviceContext = c;
Log.d(gd,"ble talker thread is init");
}
public void initBLE(){
Log.d(gd,"get device? : " + myDevice.getName());
BluetoothManager bm = (BluetoothManager) serviceContext.getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bm.getAdapter();
bluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
if(myDevice!= null) {
//This method is used to re-connect to a remote device after the connection has been dropped.
connect(myDevice.getAddress(),true );
}
}
For get context in your Thread class, make constructor in your Thread class, and use it.
For Example, I want to get info from sharedPreference in Thread class.
public class PrintControl {
private Context context;
private SharedPreferences printPreferences;
public PrintControl(Context context) {
this.context = context;
printPreferences = this.context.getSharedPreferences("printInfo", MODE_PRIVATE);
}
}
now I can use context in Thread class.