I have an app which runs in foreground waiting for certain SMS and my broadcast receiver kicks in to send a notification to the user. I would like to send this string data to an external Arduino device through bluetooth. How can i implement this in my foreground service ?
            Asked
            
        
        
            Active
            
        
            Viewed 70 times
        
    1 Answers
0
            
            
        This code Snippet could help you. The Code is from this answer (Android sample bluetooth code to send a simple string via bluetooth)
private OutputStream outputStream;
private InputStream inStream;
private void init() throws IOException {
    BluetoothAdapter blueAdapter = BluetoothAdapter.getDefaultAdapter();
    if (blueAdapter != null) {
        if (blueAdapter.isEnabled()) {
            Set<BluetoothDevice> bondedDevices = blueAdapter.getBondedDevices();
            if(bondedDevices.size() > 0) {
                Object[] devices = (Object []) bondedDevices.toArray();
                BluetoothDevice device = (BluetoothDevice) devices[position];
                ParcelUuid[] uuids = device.getUuids();
                BluetoothSocket socket = 
                device.createRfcommSocketToServiceRecord(uuids[0].getUuid());
                socket.connect();
                outputStream = socket.getOutputStream();
                inStream = socket.getInputStream();
            }
            Log.e("error", "No appropriate paired devices.");
        } else {
            Log.e("error", "Bluetooth is disabled.");
        }
    }
}
public void write(String s) throws IOException {
    outputStream.write(s.getBytes());
}
public void run() {
    final int BUFFER_SIZE = 1024;
    byte[] buffer = new byte[BUFFER_SIZE];
    int bytes = 0;
    int b = BUFFER_SIZE;
    while (true) {
        try {
            bytes = inStream.read(buffer, bytes, BUFFER_SIZE - bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
And from this answer you can learn how to detect if your app is in the foreground (check android application is in foreground or not?)
class ForegroundCheckTask extends AsyncTask<Context, Void, Boolean> {
  @Override
  protected Boolean doInBackground(Context... params) {
    final Context context = params[0].getApplicationContext();
    return isAppOnForeground(context);
  }
  private boolean isAppOnForeground(Context context) {
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
    if (appProcesses == null) {
      return false;
    }
    final String packageName = context.getPackageName();
    for (RunningAppProcessInfo appProcess : appProcesses) {
      if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
        return true;
      }
    }
    return false;
  }
}
// Use like this:
boolean foregroud = new ForegroundCheckTask().execute(context).get();
 
    
    
        daniboomberger
        
- 41
- 5
