Search code examples
androidservicebluetooth-lowenergy

Can external thread have service's context by parameter?


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 );
        }

    }

Solution

  • 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.