Как определить условия между двумя намерениями в Android Studio?

#java #android #sensors #gpio

#Ява #Android #датчики #gpio

Вопрос:

Как использовать операторы if между двумя действиями с намерением? У меня есть два разных вида деятельности по сбору данных с внешних датчиков. Я хотел бы управлять некоторыми выводами GPIO Activity1 на основе значений датчиков Activity2 .

Мероприятие 1

 public class RealTimeData extends AppCompatActivity {   private static final String TAG = "sensor_data";  private static final String FRAGMENT_DIALOG = "dialog";   @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_real_time_data);   Resources res = getResources();  GetAllResources();  OpenSerialPort();   }   // Used to load the 'native-lib' library on application startup.  static {  System.loadLibrary("native-lib");  }   private void GetAllResources() {    pressure1 = (TextView) findViewById(R.id.pressure);  temp1 = (TextView) findViewById(R.id.temperature);  co2ppm1 = (TextView) findViewById(R.id.co2);  humidity1 = (TextView) findViewById(R.id.humidity);   pressure1data = (TextView) findViewById(R.id.pressureData);  temp1data = (TextView) findViewById(R.id.temperatureData);  co2ppm1data = (TextView) findViewById(R.id.co2Data);  humidity1data = (TextView) findViewById(R.id.humidityData);   }    private sensorDataApplication sensordata = new sensorDataApplication();    private UartApplication[] mSerialport = {null, null};   private void SetValues()  {  TextView tv =(TextView) findViewById(R.id.pressureData);  tv.setText(String.valueOf(sensordata.get_pressure_value(0)));  tv =(TextView) findViewById(R.id.temperatureData);  tv.setText(String.valueOf(sensordata.get_temperature_value(0)));  tv =(TextView) findViewById(R.id.co2Data);  tv.setText(String.valueOf(sensordata.get_co2_value(0)));  tv =(TextView) findViewById(R.id.humidityData);  tv.setText(String.valueOf(sensordata.get_humidity_value(0)));  }   private void OpenSerialPort() {   new sensorDataApplication();   try {  int i =0;  for(String devicePath : Configs.uartdevicePath) {  mSerialport[i] = new UartApplication(new File(devicePath), mReaderCallback);  i  ;  }  } catch (SecurityException e) {  ErrorMessage.newInstance(getString(R.string.error_serial))  .show(getFragmentManager(), FRAGMENT_DIALOG);  } catch (IOException e) {  ErrorMessage.newInstance(getString(R.string.error_unknown))  .show(getFragmentManager(), FRAGMENT_DIALOG);  } catch (InvalidParameterException e) {  ErrorMessage.newInstance(getString(R.string.error_uart_config))  .show(getFragmentManager(), FRAGMENT_DIALOG);  }  }   private final UartApplication.ReaderCallback mReaderCallback=  new UartApplication.ReaderCallback() {  @Override  public void onDataReceived(final byte[] buffer, final int size) {  runOnUiThread(new Runnable() {  public void run() {  if (pressure1 != null) {  String received_str = new String(buffer, 0, size);  //uartRx.append(received_str);  sensordata.parse_and_update_sensordata(received_str);  SetValues();  Log.e(TAG,"received packet " received_str);   }  }  });  }  };   TextWatcher mUartTxCallback = new TextWatcher() {  @Override  public void onTextChanged(CharSequence s, int start, int before, int count) {  if(max(start,before) lt; s.length()) {  String changedStr = s.toString().substring(max(start, before), s.length());   }  }   @Override  public void beforeTextChanged(CharSequence s, int start, int count, int after) {  }   @Override  public void afterTextChanged(Editable var1) {  }  };   private void CloseSerialPort(int idx)  {  mSerialport[idx].closeSerialPort();  }   private void WriteSerialPort(String writeString, int idx)  {  mSerialport[idx].writeData(writeString);  }     private static byte[] hexStringToByteArray(String s) {  int len = s.length();  s.toUpperCase();  byte[] data = new byte[len / 2];  for (int i = 0; i lt; len; i  = 2) {  data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) lt;lt; 4)    Character.digit(s.charAt(i   1), 16));  }  return data;  }   private static String toHexString(byte[] ba) {  StringBuilder str = new StringBuilder();  for (int i = 0; i lt; ba.length; i  )  str.append(String.format("x", ba[i]));  return str.toString().toUpperCase();  }    private TextView pressure1;  private TextView temp1;  private TextView co2ppm1;  private TextView humidity1;   private TextView pressure1data;  private TextView temp1data;  private TextView co2ppm1data;  private TextView humidity1data;   }  

Мероприятие 2

 public class ManualControl extends AppCompatActivity {   static {  System.loadLibrary("native-lib");  }   Listlt;gpioApplicationgt; mGPIO = new ArrayListlt;gt;();  private static final String FRAGMENT_DIALOG = "dialog";  private int[] mGPIOList = null;  private CheckBox[] cbGPIO;    private final gpioApplication.InterruptCallback mGPIOCallback =  new gpioApplication.InterruptCallback() {  @Override  public void onDataReceived(final int GPIOnum, final int value) {  runOnUiThread(new Runnable() {  public void run() {  //Do Nothing  CheckBox cbnGPIO = GetCheckBoxGpio(GPIOnum);  cbnGPIO.setOnCheckedChangeListener(null);  if (cbnGPIO != null)  cbnGPIO.setChecked(value gt; 0 ? true : false);  cbnGPIO.setOnCheckedChangeListener(mGPIOCheckBoxCallback);  }  });  }  };   private final CompoundButton.OnCheckedChangeListener mGPIOCheckBoxCallback =  new CompoundButton.OnCheckedChangeListener() {  @Override  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  //do stuff  int gpioID = Integer.parseInt(buttonView.getHint().toString());  int GPIOValue = buttonView.isChecked() == true ? 1 : 0;  if (gpioID lt; mGPIOList.length) {  gpioApplication gpio = mGPIO.get(gpioID);  gpio.GPIOWrite(GPIOValue);  }  }  };    private CheckBox GetCheckBoxGpio(int GPIOnum) {  if (GPIOnum lt; mGPIOList.length)  return cbGPIO[GPIOnum];  return null;  }    private void GetAllResources() {   cbGPIO = new CheckBox[20];   cbGPIO[9] = (CheckBox) findViewById(R.id.checkBox_GPIO92);  cbGPIO[0] = (CheckBox) findViewById(R.id.checkBox_GPIO16);  cbGPIO[1] = (CheckBox) findViewById(R.id.checkBox_GPIO17);  cbGPIO[6] = (CheckBox) findViewById(R.id.checkBox_GPIO69);  cbGPIO[2] = (CheckBox) findViewById(R.id.checkBox_GPIO23);  for (int i = 0; i lt; mGPIOList.length; i  ) {  if (i == 9 || i == 0 || i == 1 || i == 6 || i == 2) {  GetCheckBoxGpio(i).setText(Integer.toString(mGPIOList[i]));  GetCheckBoxGpio(i).setEnabled(true);  }    }    }   private final CompoundButton.OnCheckedChangeListener mIntCheckBoxCallback =  new CompoundButton.OnCheckedChangeListener() {  @Override  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  //do stuff  int gpioID = Integer.parseInt(buttonView.getHint().toString());  boolean IntValue = buttonView.isChecked();  if (gpioID lt; mGPIOList.length) {  /*Use IntValue Re-configure GPIO Interrupt Here*/  mGPIO.get(gpioID).ConfigureInterrupt(IntValue);  }  }  };   @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_manual_control);  try {   mGPIOList = gpio_list;  GetAllResources();  for (int i = 0; i lt; mGPIOList.length; i  ) {   GPIOOpen(i);   }   ConfigureCallbacks();  GetAllResources();  } catch (Exception e) {  ErrorMessage.newInstance(e.getLocalizedMessage())  .show(getFragmentManager(), FRAGMENT_DIALOG);  }   }    private void ConfigureCallbacks() {    ConfigureGPIOCheckboxCallback();  }   private void ConfigureGPIOCheckboxCallback() {  for (int i = 0; i lt; mGPIOList.length; i  ) {  if (i == 9 || i == 0 || i == 1 || i == 6 || i == 2) {  cbGPIO[i].setOnCheckedChangeListener(mGPIOCheckBoxCallback);  }  }  }    private void GPIOOpen(int GPIOnum) {  if (GPIOnum == 9 || GPIOnum == 0 || GPIOnum == 1 || GPIOnum == 6 || GPIOnum == 2) {  mGPIO.add(new gpioApplication());  try {  mGPIO.get(GPIOnum).GPIOOpen(GPIOnum, mGPIOList[GPIOnum], mGPIOCallback);  } catch (SecurityException e) {  ErrorMessage.newInstance(getString(R.string.error_gpio))  .show(getFragmentManager(), FRAGMENT_DIALOG);  } catch (IOException e) {  ErrorMessage.newInstance(getString(R.string.error_unknown))  .show(getFragmentManager(), FRAGMENT_DIALOG);  } catch (InvalidParameterException e) {  ErrorMessage.newInstance(getString(R.string.error_gpio_config))  .show(getFragmentManager(), FRAGMENT_DIALOG);  }  } else {  mGPIO.add(null);  }  } }   

В приведенных выше кодах контакты GPIO должны управляться значениями датчика co2ppm 1 (если значение датчика co2ppm 1 превышает 2000, он должен включить вывод GPIO 9).

Комментарии:

1. Там очень много кода! Я полагаю, что вы опустите то, что не имеет отношения к проблеме, возможно, добавьте некоторые комментарии в области кода, с которым у вас возникли проблемы: как он ведет себя сейчас, чего вы пытаетесь достичь.

2. Рассмотрите возможность передачи данных с помощью другого действия intent.putExtra .