kommt, wenn das Telefon mit dem Bluetooth im Auto verbunden ist. Ich möchte, dass sich meine App automatisch einschaltet. Um dies zu tun, muss ich den Bluetooth-Gerätenamen des gepaarten Fahrzeugs in einer Zeichenfolge speichern. dann, wenn das Telefon Bluetooth mit etwas verbunden ist. Ich muss nachsehen, ob es das Auto ist. Wenn es ist, möchte ich einen Dienst beginnen.Daten an Broadcast-Empfänger übergeben, die bereits Absichtsfilter hat, der von Aktivität
Ich habe Schwierigkeiten beim Übergeben der Zeichenfolge, die den Bluetooth-Auto-Gerätenamen enthält, an den Empfänger, da mein Empfänger bereits einen Intent-Filter empfängt, der auf ACTION_ACL_CONNECTED wartet. ist es möglich, einen Intent & einen Intent-Filter an denselben Empfänger zu senden.
Wie kann ich in diesem Fall die Zeichenfolge btdeviceName von der Aktivität an den Empfänger senden.
Hauptaktivität
private void addDrawerItems() {
final BroadcastReceiver bluetoothBroadcast = new BluetoothReceiver();
final IntentFilter blueToothFilter = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);
final Intent btbroadcastIntent = new Intent(this, BluetoothReceiver.class);
btbroadcastIntent.putExtra("btDeviceName", mPairedBluetoothDevice);
String[] osArray = {"Bluetooth Auto Start", "Reply to Calls", "Reply to sms", "Customise Message"};
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, osArray);
if (mIsPremiumUser) {
mDrawerList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
} else {
mDrawerList.setChoiceMode(AbsListView.CHOICE_MODE_NONE);
}
mDrawerList.setAdapter(mAdapter);
mDrawerList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0) {
Toast.makeText(getApplicationContext(), "blue", Toast.LENGTH_LONG).show();
showBluetoothDialog();
}
return true;
}
});
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView ctv = (CheckedTextView) view;
if (!mIsPremiumUser) {
Toast.makeText(getApplication(), "Upgrade", Toast.LENGTH_LONG).show();
return;
}
switch (position) {
case 0:
if (ctv.isChecked()) {
if (!isblueToothRegistered) {
registerReceiver(bluetoothBroadcast, blueToothFilter);
sendBroadcast(btbroadcastIntent);
isblueToothRegistered = true;
}
} else {
if (isblueToothRegistered) {
unregisterReceiver(bluetoothBroadcast);
isblueToothRegistered = false;
}
}
break;
BluetoothReceiver
public class BluetoothReceiver extends BroadcastReceiver {
private MainActivity ma;
private String pairedDevice;
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Receieved", Toast.LENGTH_LONG).show();
String action = intent.getAction();
pairedDevice = intent.getStringExtra("btDeviceName");
Toast.makeText(context, pairedDevice + "2", Toast.LENGTH_LONG).show();
final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
Toast.makeText(context, "Bluetooth Connected", Toast.LENGTH_LONG).show();
if (device.getName().equals(pairedDevice)) {
Toast.makeText(context, device.getName() + " 1", Toast.LENGTH_LONG).show();
}
} else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
Toast.makeText(context, "Bluetooth Disconnected", Toast.LENGTH_LONG).show();
}
}
}
Vielen Dank. Ich bin immer noch ein wenig verwirrt darüber, wie das im Broadcast-Empfänger aussieht. –
Wie unterscheide ich die beiden Aktionen im Empfänger? –
Sie überprüfen, was von 'intent.getAction()' zurückgegeben wird. Im Moment haben Sie zwei Fälle, einen für 'BluetoothDevice.ACTION_ACL_DISCONNECTED' und einen weiteren für' BluetoothDevice.ACTION_ACL_CONNECTED'. Sie müssen eine dritte hinzufügen, die nach dem Namen Ihrer benutzerdefinierten Aktion sucht, unabhängig davon, wie Sie sie aufrufen möchten (in meinem Beispiel die 'my.custom.action'). Wenn das die Aktion ist, dann wissen Sie, dass die Absicht den Zusatz "btDeviceName" enthält. –