Ich bin neu in Java Programmierung und ich habe ein Problem. Ich arbeite an einem Controller für arduino Auto mit Bluetooth. Das Auto hat 3 Runnig-Modi: Test, Auto und Handbuch. Ich machte eine MainActivity, die ein Layout mit 3 Tasten für jeden Modus hat und eine Taste Connect für Bluetooth-Verbindung. In einer anderen Aktivität SecondActivity, die ein anderes Layout mit Tasten zur Steuerung der Richtung und Geschwindigkeit des Autos hat, aber überraschend mBluetooth.write funktioniert nicht.Wie übertragen Daten mit Bluetooth in einer anderen Aktivität?
Dies ist MainActivity:
public class MainActivity extends AppCompatActivity {
ImageButton test, manual,connect;
Button back;
private BluetoothAdapter mbluetoothAdapter;
protected AlertDialog.Builder builder;
ConnectThread mBluetooth = new ConnectThread();
String mBluetoothName = "";
String mBluetoothAdress = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Context context = this;
//final LayoutInflater factory = getLayoutInflater();
//final View textEntryView = factory.inflate(R.layout.activity_main);
builder = new AlertDialog.Builder(this);
mbluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
connect = (ImageButton) findViewById(R.id.connect);
test = (ImageButton) findViewById(R.id.test);
manual = (ImageButton) findViewById(R.id.manual);
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context,SecondActivity.class);
context.startActivity(intent);
}
});
manual.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context,SecondActivity.class);
context.startActivity(intent);
}
});
connect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mbluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(enableBtIntent);
} else {
if (!mBluetooth.mBluetoothAddress.equals("")) {//if another connection is already exits then close it first
stopAllActivities();
} else {
try {
Intent serverIntent = new Intent(MainActivity.this, DeviceListActivity.class);
startActivityForResult(serverIntent, Helper.REQUEST_CONNECT_DEVICE);
} catch (Exception e) {
showToast(getString(R.string.errorOccured) + ": " + e.getMessage());
e.printStackTrace();
}
}
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case Helper.REQUEST_CONNECT_DEVICE:
if (resultCode == Activity.RESULT_OK) {
mBluetoothName = data.getExtras().getString(Helper.EXTRA_BLUETOOTH_NAME);
mBluetoothAdress = data.getExtras().getString(Helper.EXTRA_BLUETOOTH_ADDRESS);
// setBluetoothInfo();
showToast(R.string.connectedDevice + mBluetoothName);
if (!mBluetoothAdress.equals("")) {
if (!mBluetooth.connect(mBluetoothAdress)){
}
}
}
break;
}
}
private void showToast(String message) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
private void stopAllActivities() {
mBluetooth.write("S"); //send Stop Signal before it closes the connection
mBluetooth.mBluetoothAddress = ""; // reset address
mBluetooth.close();//close Connection
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
@Override
public void onPause() {
if (mbluetoothAdapter != null) {
if (mbluetoothAdapter.isDiscovering()) {
mbluetoothAdapter.cancelDiscovery();
}
}
super.onPause();
}}
Und das ist die SecondActivity:
public class SecondActivity extends AppCompatActivity {
final Context context = this;
Button back;
ImageButton btnup, btndown, btnright, btnleft;
ConnectThread mBluetooth = new ConnectThread();//??????
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
back = (Button) findViewById(R.id.back);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MainActivity.class);
context.startActivity(intent);
}
});
btnup = (ImageButton) findViewById(R.id.btnup);
btndown = (ImageButton) findViewById(R.id.btndown);
btnleft = (ImageButton) findViewById(R.id.btnleft);
btnright = (ImageButton) findViewById(R.id.btnright);
final TextView direction = (TextView) findViewById(R.id.text_direction);
final TextView steering = (TextView) findViewById(R.id.steering_direction);
final Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer);
btndown.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mBluetooth.write("2");
direction.setText(R.string.Backwards);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
mBluetooth.write("x");
direction.setText(R.string.blank);
}
return false;
}
});
btnup.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mBluetooth.write("8");
direction.setText(R.string.Forward);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
mBluetooth.write("z");
direction.setText(R.string.blank);
}
return false;
}
});
btnright.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mBluetooth.write("6");
steering.setText(R.string.Right);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
mBluetooth.write("c");
steering.setText(R.string.none);
}
return false;
}
});
btnleft.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mBluetooth.write("4");
steering.setText(R.string.Left);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
mBluetooth.write("v");
steering.setText(R.string.none);
}
return false;
}
});
}}
ich den Code für Bluetooth-Verbindung und Tasten in einer Aktivität getestet und funktionierte gut