したがって、Android Phone (4.2) からバイト配列を Bluetooth 経由で μController に送信する必要があります。これを実現するために、SDK で Google が提供する Bluetooth チャットの例を使用し、少し変更しました。私は2つのコードを持っています。1つは機能しており、1つは機能していません。コード 2 が機能しないのに、コード 1 が機能するのはなぜですか? (明確にするために: コード 1 を使用すると、byte[] を µController に送信できます)
コード 2 で送信ボタンを押すと、アプリがクラッシュします。
もちろん、コード 1 を使用することもできますが、将来のプロジェクトでこのエラーを回避するためにコード 2 が機能しない理由を知りたいです。
コードの違いは次のとおりです。
- コード 1 は、toggleButton の状態が変化したときに byte[] を送信します。
- コード 2 は、SendButton が押されたときに byte[] を送信します。
//コード 1
private void setup() {
Log.d(TAG, "setup()");
final Context context = getApplicationContext();
final ToggleButton TBut1 = (ToggleButton)findViewById(R.id.toggleButton1);
final ToggleButton TBut2 = (ToggleButton)findViewById(R.id.toggleButton2);
final ToggleButton TBut3 = (ToggleButton)findViewById(R.id.toggleButton3);
final TextView txt1 = (TextView)findViewById(R.id.textView2);
final byte[] daten = new byte[1];
TBut1.setChecked(false);
TBut2.setChecked(false);
TBut3.setChecked(false);
daten[0]=0;
TBut1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if ((TBut1.isChecked() == true)){
daten[0]= (byte) (daten[0] | 4);
mService.write(daten);
}else{
daten[0]= (byte) (daten[0] & ~4);
mService.write(daten);
}
}
});
TBut2.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
if ((TBut2.isChecked() == true)){
daten[0]= (byte) (daten[0] | 2);
mService.write(daten);
}else{
daten[0]= (byte) (daten[0] & ~2);
mService.write(daten);
}
}
});
TBut3.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
if ((TBut3.isChecked() == true)){
daten[0]= (byte) (daten[0] | 1);
mService.write(daten);
}else{
daten[0]= (byte) (daten[0] & ~1);
mService.write(daten);
}
}
});
// Initialize the BluetoothChatService to perform bluetooth connections
mService = new BTService(this, mHandler);
// Initialize the buffer for outgoing messages
mOutStringBuffer = new StringBuffer("");
}
//コード 2
private void setup() {
Log.d(TAG, "setup()");
final ToggleButton TBut1 = (ToggleButton) findViewById(R.id.toggleButton1);
final ToggleButton TBut2 = (ToggleButton) findViewById(R.id.toggleButton2);
final ToggleButton TBut3 = (ToggleButton) findViewById(R.id.toggleButton3);
final Button sendButton = (Button) findViewById(R.id.button1);
sendButton.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
daten[0] = 0;
if(TBut1.isChecked()) {
daten[0] = (byte) (daten[0] | 1);
} else {
daten[0]= (byte) (daten[0] & ~1);
}
if(TBut2.isChecked()) {
daten[0] = (byte) (daten[0] | 2);
} else {
daten[0]= (byte) (daten[0] & ~2);
}
if(TBut3.isChecked()) {
daten[0] = (byte) (daten[0] | 4);
} else {
daten[0]= (byte) (daten[0] & ~4);
}
if (mService.getState() == BTService.STATE_CONNECTED) {
mService.write(daten);
}
}
});
// Initialize the BluetoothChatService to perform bluetooth connections
mService = new BTService(this, mHandler);
// Initialize the buffer for outgoing messages
mOutStringBuffer = new StringBuffer("");
}