Android Open Source - remotteSDK_Android Sensors Activity






From Project

Back to project page remotteSDK_Android.

License

The source code is released under:

MIT License

If you think the Android project remotteSDK_Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.accent_systems.remottebootloader;
//from w  w w. j  a v a  2s .  c o  m
import java.util.UUID;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class SensorsActivity extends Activity {
  
  private ImageView back, header, enable_accel, enable_gyro, enable_alt, enable_therm;
  private TextView batt_value, key_value, accel_value, gyro_value, alt_value, therm_value;
  private BluetoothGattCharacteristic battChar = null, keyChar=null, accelChar = null, accelConfChar = null, gyroChar = null, gyroConfChar = null, altChar = null, altConfChar = null, thermChar = null, thermConfChar = null,
      motionChar = null;
  private Thread sub, accel_notif, gyro_notif, alt_notif, therm_notif;
  private Button buzzer, vibrator, buzzvib;
  
  private boolean accel = false, gyro = false, alt = false, therm = false;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sensors_view);
    
    back = (ImageView) findViewById(R.id.back_button);
    header = (ImageView) findViewById(R.id.remotte_text_header_sensors);
    enable_accel = (ImageView) findViewById(R.id.enable_accel);
    enable_gyro = (ImageView) findViewById(R.id.enable_gyro);
    enable_alt = (ImageView) findViewById(R.id.enable_alt);
    enable_therm = (ImageView) findViewById(R.id.enable_therm);
    
    batt_value = (TextView) findViewById(R.id.batt_value);
    batt_value.setText("BATTERY LEVEL:");
    key_value = (TextView) findViewById(R.id.key_value);
    key_value.setText("BUTTON PRESSED: --");
    accel_value = (TextView) findViewById(R.id.accel_value);
    accel_value.setText("X: --    Y: --    Z: --");
    gyro_value = (TextView) findViewById(R.id.gyro_value);
    gyro_value.setText("X: --    Y: --    Z: --");
    alt_value = (TextView) findViewById(R.id.alt_value);
    alt_value.setText("T: --    A: --");
    therm_value = (TextView) findViewById(R.id.therm_value);
    therm_value.setText("TEMPERATURE: --");
    
    buzzer = (Button) findViewById(R.id.buzzerButt);
    vibrator = (Button) findViewById(R.id.vibratorButt);
    buzzvib = (Button) findViewById(R.id.buzzvibButt);
    
    //STORE ALL THE SENSORS CHARACTERISTICS IN SEPARATED VARIABLES 
    if (MainActivity.chars!=null){
      for(int i=0; i<MainActivity.chars.size(); i++){
        if(MainActivity.chars.get(i).getUuid().toString().contains("2a19")){
          battChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("ffe1")){
          keyChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa11")){
          accelChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa12")){
          accelConfChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa51")){
          gyroChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa52")){
          gyroConfChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa41")){
          altChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa42")){
          altConfChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa01")){
          thermChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa02")){
          thermConfChar = MainActivity.chars.get(i);
        }else if(MainActivity.chars.get(i).getUuid().toString().contains("aa81")){
          motionChar = MainActivity.chars.get(i);
        }
      }
      sub = new Thread(subscribeNotifications);
      sub.start();
    }
    
    //ACTION BAR BACK BUTTON - DESTROYS THE ACTIVITY
    back.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        finish();
      }
    });
    
    //ACTION BAR BACK BUTTON - DESTROYS THE ACTIVITY
    header.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        finish();
      }
    });
    
    //ENABLE/DISABLE ACCELEROMETER NOTIFICATIONS
    enable_accel.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        accel_notif = new Thread(enableAccelNotif);
        accel_notif.start();
      }
    });
    
    //ENABLE/DISABLE GYROSCOPE NOTIFICATIONS
    enable_gyro.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        gyro_notif = new Thread(enableGyroNotif);
        gyro_notif.start();
      }
    });
    
    //ENABLE/DISABLE ALTIMETER NOTIFICATIONS
    enable_alt.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        alt_notif = new Thread(enableAltNotif);
        alt_notif.start();
      }
    });
    
    //ENABLE/DISABLE THERMOMETER NOTIFICATIONS
    enable_therm.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        therm_notif = new Thread(enableThermNotif);
        therm_notif.start();
      }
    });
    
    //ACTIVATE BUZZER
    buzzer.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        motionChar.setValue(hexStringToByteArray("02"));
        MainActivity.writeCharacteristic(motionChar);
      }
    });
    
    //ACTIVATE VIBRATOR
    vibrator.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        motionChar.setValue(hexStringToByteArray("01"));
        MainActivity.writeCharacteristic(motionChar);
      }
    });
    
    //ACTIVATE VIBRATOR AND BUZZER  
    buzzvib.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        motionChar.setValue(hexStringToByteArray("03"));
        MainActivity.writeCharacteristic(motionChar);
      }
    });
  }
  
  //THREAD WHICH READS BATTERY, ENABLE NOTIFICATIONS FOR THE BUTTONS AND CHECKS IF ANY OF THE SENSORS ARE ALREADY ACTIVATED AND SENDIND NOTIFICATIONS
  private Thread subscribeNotifications = new Thread(new Runnable(){
    public void run(){      
      MainActivity.readCharacteristic(battChar);    //READ BATTERY CHARACTERISTIC
      try {
        Thread.sleep(1000);
      } catch (Exception e) {
        return;
      }
      runOnUiThread(new Runnable(){    //GET BATTERY VALUE
              public void run(){  
                if(bytesToHex(battChar.getValue()).equalsIgnoreCase("--")){
                  batt_value.setText("BATTERY LEVEL: error");
                }else{
                  batt_value.setText("BATTERY LEVEL: "+Integer.parseInt(bytesToHex(battChar.getValue()), 16)+"%");
                }
              }
          });
      if(!accel_value.getText().toString().contains("--")){
        runOnUiThread(new Runnable(){
                public void run(){  
                  accel = true;
                  enable_accel.setImageDrawable(getResources().getDrawable(R.drawable.check));
            enable_accel.setBackground(getResources().getDrawable(R.drawable.custom_btn_blue));
                }
            });
      }
      if(!gyro_value.getText().toString().contains("--")){
        runOnUiThread(new Runnable(){
                public void run(){  
                  gyro = true;
                  enable_gyro.setImageDrawable(getResources().getDrawable(R.drawable.check));
            enable_gyro.setBackground(getResources().getDrawable(R.drawable.custom_btn_blue));
                }
            });
      }
      if(!alt_value.getText().toString().contains("--")){
        runOnUiThread(new Runnable(){
                public void run(){  
                  alt = true;
                  enable_alt.setImageDrawable(getResources().getDrawable(R.drawable.check));
            enable_alt.setBackground(getResources().getDrawable(R.drawable.custom_btn_blue));
                }
            });
      }
      if(!therm_value.getText().toString().contains("--")){
        runOnUiThread(new Runnable(){
                public void run(){  
                  therm = true;
                  enable_therm.setImageDrawable(getResources().getDrawable(R.drawable.check));
            enable_therm.setBackground(getResources().getDrawable(R.drawable.custom_btn_blue));
                }
            });
      }
      //ACTIVATE MOTION KEYS NOTIFICATION
      MainActivity.mBluetoothGatt.setCharacteristicNotification(keyChar, true);  
      BluetoothGattDescriptor descriptor = keyChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
      descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
      MainActivity.mBluetoothGatt.writeDescriptor(descriptor);
      //INTERUPT THREAD AFTER FINISH ALL TASKS
      sub.interrupt();
    }
  });
  
  //THREAD WHICH ENABLES/DISABLES ACCELEROMETER NOTIFICATION
  private Thread enableAccelNotif = new Thread(new Runnable(){
    public void run(){      
      if(accel){  //IF SENSOR ENABLED AND SENDING NOTIFICATIONS
        //DISABLE NOTIFICATIONS
        MainActivity.mBluetoothGatt.setCharacteristicNotification(accelChar, true);
        BluetoothGattDescriptor descriptor2 = accelChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor2.setValue(BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
        MainActivity.mBluetoothGatt.writeDescriptor(descriptor2);
        try {
          Thread.sleep(2000);
        } catch (Exception e) {
          return;
        }
        //DISABLE SENSOR & CLEAR VALUES
        accelConfChar.setValue(hexStringToByteArray("00"));
        MainActivity.writeCharacteristic(accelConfChar);
        runOnUiThread(new Runnable(){
          public void run(){  
            enable_accel.setImageDrawable(getResources().getDrawable(R.drawable.uncheck));
            enable_accel.setBackground(getResources().getDrawable(R.drawable.custom_btn_disable));
            accel_value.setText("X: --    Y: --    Z: --");
                }
            });
        accel = false;
      }else{  //IF SENSOR DISABLED 
        //ENABLE SENSOR
        accelConfChar.setValue(hexStringToByteArray("01"));
        MainActivity.writeCharacteristic(accelConfChar);
        try {
          Thread.sleep(1000);
        } catch (Exception e) {
          return;
        }
        //ENABLE NOTIFICATIONS
        MainActivity.mBluetoothGatt.setCharacteristicNotification(accelChar, true);
        BluetoothGattDescriptor descriptor2 = accelChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor2.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        MainActivity.mBluetoothGatt.writeDescriptor(descriptor2);
        runOnUiThread(new Runnable(){
          public void run(){  
            enable_accel.setImageDrawable(getResources().getDrawable(R.drawable.check));
            enable_accel.setBackground(getResources().getDrawable(R.drawable.custom_btn_blue));
                }
            });
        accel = true;
      }
      //STOP THREAD AFTER FINISH ALL TASKS
      accel_notif.interrupt();  
    }
  });
  
  //THREAD WHICH ENABLES/DISABLES GYROSCOPE NOTIFICATION
  private Thread enableGyroNotif = new Thread(new Runnable(){
    public void run(){      
      if(gyro){  //IF SENSOR ENABLED AND SENDING NOTIFICATIONS
        //DISABLE NOTIFICATIONS
        MainActivity.mBluetoothGatt.setCharacteristicNotification(gyroChar, true);
        BluetoothGattDescriptor descriptor = gyroChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor.setValue(BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
        MainActivity.mBluetoothGatt.writeDescriptor(descriptor);
        try {
          Thread.sleep(2000);
        } catch (Exception e) {
          return;
        }
        //DISABLE SENSOR & CLEAR VALUES
        gyroConfChar.setValue(hexStringToByteArray("00"));
        MainActivity.writeCharacteristic(gyroConfChar);
        runOnUiThread(new Runnable(){
          public void run(){  
            enable_gyro.setImageDrawable(getResources().getDrawable(R.drawable.uncheck));
            enable_gyro.setBackground(getResources().getDrawable(R.drawable.custom_btn_disable));
            gyro_value.setText("X: --    Y: --    Z: --");
                }
            });
        gyro = false;
      }else{  //IF SENSOR DISABLED 
        //ENABLE SENSOR
        gyroConfChar.setValue(hexStringToByteArray("01"));
        MainActivity.writeCharacteristic(gyroConfChar);
        try {
          Thread.sleep(1000);
        } catch (Exception e) {
          return;
        }
        //ENABLE NOTIFICATIONS
        MainActivity.mBluetoothGatt.setCharacteristicNotification(gyroChar, true);
        BluetoothGattDescriptor descriptor = gyroChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        MainActivity.mBluetoothGatt.writeDescriptor(descriptor);
        runOnUiThread(new Runnable(){
          public void run(){  
            enable_gyro.setImageDrawable(getResources().getDrawable(R.drawable.check));
            enable_gyro.setBackground(getResources().getDrawable(R.drawable.custom_btn_blue));
                }
            });
        gyro = true;
      }
      //STOP THREAD AFTER FINISH ALL TASKS
      gyro_notif.interrupt();  
    }
  });
  
  //THREAD WHICH ENABLES/DISABLES ALTIMETER NOTIFICATION
  private Thread enableAltNotif = new Thread(new Runnable(){
    public void run(){      
      if(alt){  //IF SENSOR ENABLED AND SENDING NOTIFICATIONS
        //DISABLE NOTIFICATIONS
        MainActivity.mBluetoothGatt.setCharacteristicNotification(altChar, true);
        BluetoothGattDescriptor descriptor = altChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor.setValue(BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
        MainActivity.mBluetoothGatt.writeDescriptor(descriptor);
        try {
          Thread.sleep(2000);
        } catch (Exception e) {
          return;
        }
        //DISABLE SENSOR & CLEAR VALUES
        altConfChar.setValue(hexStringToByteArray("00"));
        MainActivity.writeCharacteristic(altConfChar);
        runOnUiThread(new Runnable(){
          public void run(){  
            enable_alt.setImageDrawable(getResources().getDrawable(R.drawable.uncheck));
            enable_alt.setBackground(getResources().getDrawable(R.drawable.custom_btn_disable));
            alt_value.setText("T: --    A: --");
                }
            });
        alt = false;
      }else{  //IF SENSOR DISABLED 
        //ENABLE SENSOR
        altConfChar.setValue(hexStringToByteArray("01"));
        MainActivity.writeCharacteristic(altConfChar);
        try {
          Thread.sleep(1000);
        } catch (Exception e) {
          return;
        }
        //ENABLE NOTIFICATIONS
        MainActivity.mBluetoothGatt.setCharacteristicNotification(altChar, true);
        BluetoothGattDescriptor descriptor = altChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        MainActivity.mBluetoothGatt.writeDescriptor(descriptor);
        runOnUiThread(new Runnable(){
          public void run(){  
            enable_alt.setImageDrawable(getResources().getDrawable(R.drawable.check));
            enable_alt.setBackground(getResources().getDrawable(R.drawable.custom_btn_blue));
                }
            });
        alt = true;
      }
      //STOP THREAD AFTER FINISH ALL TASKS
      alt_notif.interrupt();  
    }
  });
  
  //THREAD WHICH ENABLES/DISABLES THERMOMETER NOTIFICATION
  private Thread enableThermNotif = new Thread(new Runnable(){
    public void run(){      
      if(therm){  //IF SENSOR ENABLED AND SENDING NOTIFICATIONS
        //DISABLE NOTIFICATIONS
        MainActivity.mBluetoothGatt.setCharacteristicNotification(thermChar, true);
        BluetoothGattDescriptor descriptor = thermChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor.setValue(BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
        MainActivity.mBluetoothGatt.writeDescriptor(descriptor);
        try {
          Thread.sleep(2000);
        } catch (Exception e) {
          return;
        }
        //DISABLE SENSOR & CLEAR VALUES
        thermConfChar.setValue(hexStringToByteArray("00"));
        MainActivity.writeCharacteristic(thermConfChar);
        runOnUiThread(new Runnable(){
          public void run(){  
            enable_therm.setImageDrawable(getResources().getDrawable(R.drawable.uncheck));
            enable_therm.setBackground(getResources().getDrawable(R.drawable.custom_btn_disable));
            therm_value.setText("TEMPERATURE: --");
                }
            });
        therm = false;
      }else{  //IF SENSOR DISABLED 
        //ENABLE SENSOR
        thermConfChar.setValue(hexStringToByteArray("01"));
        MainActivity.writeCharacteristic(thermConfChar);
        try {
          Thread.sleep(1000);
        } catch (Exception e) {
          return;
        }
        //ENABLE NOTIFICATIONS
        MainActivity.mBluetoothGatt.setCharacteristicNotification(thermChar, true);
        BluetoothGattDescriptor descriptor = thermChar.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        MainActivity.mBluetoothGatt.writeDescriptor(descriptor);
        runOnUiThread(new Runnable(){
          public void run(){  
            enable_therm.setImageDrawable(getResources().getDrawable(R.drawable.check));
            enable_therm.setBackground(getResources().getDrawable(R.drawable.custom_btn_blue));
                }
            });
        therm = true;
      }
      //STOP THREAD AFTER FINISH ALL TASKS
      therm_notif.interrupt();  
    }
  });
  
  
  
  
  
  
  
  
  //RECEIVER WHICH HANDLES THE INTENTS GOT FROM THE MAIN ACTIVITY 
  private BroadcastReceiver valuesChanged = new BroadcastReceiver() {
    @SuppressLint("NewApi")
    @Override
      public void onReceive(Context context, Intent intent){
        //KEY PRESSED NOTIFICATION
      if (intent.getAction().equals("com.remotte.KEY_PRESSED")) {                //IF INTENT FROM KEY PRESSED NOTIFICATION
          final int value = Integer.parseInt((intent.getStringExtra("key_value")), 16); //GET VALUE FROM INTENT
          runOnUiThread(new Runnable() {
          @Override
          public void run() {
            switch (value){ //DISTINGUIS BETWEEN PRESSED BUTTONS
              case 0:
                key_value.setText("BUTTON PRESSED: --");
                break;
              case 1:
                key_value.setText("BUTTON PRESSED: ENTER BUTTON");
                break;
              case 2:
                key_value.setText("BUTTON PRESSED: POWER BUTTON");
                break;
              }
          }
        });
      }else if(intent.getAction().equals("com.remotte.BATTERY_CHANGED")) {          //IF INTENT FROM BATTERY CHANGED NOTIFICATION
          final int value = Integer.parseInt((intent.getStringExtra("batt_value")), 16);
          runOnUiThread(new Runnable() {
          @Override
          public void run() {
            batt_value.setText("BATTERY LEVEL: "+value+"%");  //UPDATE BATTERY LABEL WITH THE NEW VALUE
          }
        });
        }else if(intent.getAction().equals("com.remotte.ACCELEROMETER")) {            //IF INTENT FROM ACCELEROMETER NOTIFICATION
          final String value = (intent.getStringExtra("accel_value"));
          runOnUiThread(new Runnable() {
          @Override
          public void run() {    //UPDATE LABEL WITH THE NEW ACCELERATION VALUES (BY COORDINATES)
            int X = Integer.parseInt(value.substring(0,2), 16);
            int Y = Integer.parseInt(value.substring(2,4), 16);
            int Z = Integer.parseInt(value.substring(4,6), 16);
            accel_value.setText("X: "+X+"    Y: "+Y+"    Z: "+Z);
          }
        });
        }else if(intent.getAction().equals("com.remotte.GYROSCOPE")) {              //IF INTENT FROM GYROSCOPE NOTIFICATION
          final String value = (intent.getStringExtra("gyro_value"));
          runOnUiThread(new Runnable() {
          @Override
          public void run() {
            int X = Integer.parseInt(value.substring(0,2), 16);
            int Y = Integer.parseInt(value.substring(2,4), 16);
            int Z = Integer.parseInt(value.substring(4,6), 16);
            gyro_value.setText("X: "+X+"    Y: "+Y+"    Z: "+Z); ////UPDATE LABEL WITH THE NEW GYROSCOPE VALUES (BY COORDINATES)
          }
        });
        }else if(intent.getAction().equals("com.remotte.ALTIMETER")) {              //IF INTENT FROM ALTIMETER NOTIFICATION
          final String value = (intent.getStringExtra("alt_value"));
          runOnUiThread(new Runnable() {
          @Override
          public void run() {
            int T = Integer.parseInt(value.substring(0,2), 16);
            int A = Integer.parseInt(value.substring(2,6), 16);
            alt_value.setText("T: "+value.substring(0,2)+"(Dec: "+T+")"+"    A: "+value.substring(2,6)+"(Dec: "+A+")");  //VALUES NOT PARSED YET: HEX & DEC VALUES POSTED
          }
        });
        }else if(intent.getAction().equals("com.remotte.THERMOMETER")) {            //IF INTENT FROM THERMOMETER NOTIFICATION
          final String value = (intent.getStringExtra("temp_value"));
          runOnUiThread(new Runnable() {
          @Override
          public void run() {
            int T = Integer.parseInt(value.substring(0,4), 16);
            therm_value.setText("TEMPERATURE: "+value.substring(0,4)+"(Dec: "+T+")");  //HEX & DEC VALUE: STRING VALUE NOT PARSED PROPERLY
          }
        });
        }else if(intent.getAction().equals("com.remotte.REMOTTE_DISCONNECTED")) {  //HANDLES DESCONNECTION. IT RECEIVES WHEN REMOTTE HAS BEEN DISCONNECTED. IT FINISHES/DESTROYS THE ACTIVITY RETURNING TO THE MAIN ONE.
          Toast.makeText(SensorsActivity.this, "REMOTTE DISCONNECTED", Toast.LENGTH_SHORT).show();
          finish();
        }
      }
    };
  
  //HEX STRING TO BYTE ARRAY CONVERTER
  public static byte[] hexStringToByteArray(String s) {
      try {
          int len = s.length();
            byte[] data = new byte[len/2];
            for(int i = 0; i < len; i+=2){
                data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
            }
            return data;
    } catch (Exception e) {
    }  
        return new byte[]{00};
    }
  
  //BYTE ARRAY TO HEX STRING CONVERTER
  public static String bytesToHex(byte[] bytes) {
      char[] hexArray = "0123456789ABCDEF".toCharArray();
      char[] hexChars = null;
        try{
          hexChars = new char[bytes.length * 2];
        }catch(Exception e){}
      if(hexChars!=null){
        for ( int j = 0; j < bytes.length; j++ ) {
                int v = bytes[j] & 0xFF;
                hexChars[j * 2] = hexArray[v >>> 4];
                hexChars[j * 2 + 1] = hexArray[v & 0x0F];
            }
        return new String(hexChars);
      }else{
        return "--";
      }
    }
  
  
  //REGISTER THE BROADCAST RECEIVER WITH ALL THE FILTERS (INTENT TYPES) WHEN ACTIVITY STARTS/RESUMES
  @Override
  protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter();
        filter.addAction("com.remotte.KEY_PRESSED");
        filter.addAction("com.remotte.BATTERY_CHANGED");
        filter.addAction("com.remotte.ACCELEROMETER");
        filter.addAction("com.remotte.GYROSCOPE");
        filter.addAction("com.remotte.ALTIMETER");
        filter.addAction("com.remotte.THERMOMETER");
        filter.addAction("com.remotte.REMOTTE_DISCONNECTED");
        registerReceiver(valuesChanged, filter);
  }
  
  
  //UNREGISTER THE BROADCAST RECEIVER WHEN ACTIVITY PAUSED/DESTROYED
  @Override
  protected void onPause() {
    super.onPause();
    unregisterReceiver(valuesChanged);
  }
  
}




Java Source Code List

com.accent_systems.remottebootloader.MainActivity.java
com.accent_systems.remottebootloader.SensorsActivity.java