mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Fixed a bug where the bluetooth LE scanner would continue to scan even if the bluetooth selector window was closed
This commit is contained in:
parent
376b83986a
commit
ebbba641a4
3 changed files with 93 additions and 37 deletions
|
|
@ -28,7 +28,8 @@
|
|||
METHOD (pairBluetoothMidiDevice, "pairBluetoothMidiDevice", "(Ljava/lang/String;)Z") \
|
||||
METHOD (unpairBluetoothMidiDevice, "unpairBluetoothMidiDevice", "(Ljava/lang/String;)V") \
|
||||
METHOD (getHumanReadableStringForBluetoothAddress, "getHumanReadableStringForBluetoothAddress", "(Ljava/lang/String;)Ljava/lang/String;") \
|
||||
METHOD (isBluetoothDevicePaired, "isBluetoothDevicePaired", "(Ljava/lang/String;)Z")
|
||||
METHOD (isBluetoothDevicePaired, "isBluetoothDevicePaired", "(Ljava/lang/String;)Z") \
|
||||
METHOD (startStopScan, "startStopScan", "(Z)V")
|
||||
|
||||
DECLARE_JNI_CLASS (AndroidBluetoothManager, JUCE_ANDROID_ACTIVITY_CLASSPATH "$BluetoothManager");
|
||||
#undef JNI_CLASS_MEMBERS
|
||||
|
|
@ -36,6 +37,15 @@ DECLARE_JNI_CLASS (AndroidBluetoothManager, JUCE_ANDROID_ACTIVITY_CLASSPATH "$Bl
|
|||
//==============================================================================
|
||||
struct AndroidBluetoothMidiInterface
|
||||
{
|
||||
static void startStopScan (bool startScanning)
|
||||
{
|
||||
JNIEnv* env = getEnv();
|
||||
LocalRef<jobject> btManager (android.activity.callObjectMethod (JuceAppActivity.getAndroidBluetoothManager));
|
||||
|
||||
if (btManager.get() != nullptr)
|
||||
env->CallVoidMethod (btManager.get(), AndroidBluetoothManager.startStopScan, (jboolean) (startScanning ? 1 : 0));
|
||||
}
|
||||
|
||||
static StringArray getBluetoothMidiDevicesNearby()
|
||||
{
|
||||
StringArray retval;
|
||||
|
|
@ -172,7 +182,6 @@ public:
|
|||
setRowHeight (40);
|
||||
setModel (this);
|
||||
setOutlineThickness (1);
|
||||
updateDeviceList();
|
||||
startTimer (timerPeriodInMs);
|
||||
}
|
||||
|
||||
|
|
@ -365,6 +374,8 @@ public:
|
|||
{
|
||||
ScopedPointer<ModalComponentManager::Callback> exitCallback (exitCallbackToUse);
|
||||
|
||||
AndroidBluetoothMidiInterface::startStopScan (true);
|
||||
|
||||
setAlwaysOnTop (true);
|
||||
setVisible (true);
|
||||
addToDesktop (ComponentPeer::windowHasDropShadow);
|
||||
|
|
@ -375,6 +386,11 @@ public:
|
|||
enterModalState (true, exitCallback.release(), true);
|
||||
}
|
||||
|
||||
~BluetoothMidiSelectorOverlay()
|
||||
{
|
||||
AndroidBluetoothMidiInterface::startStopScan (false);
|
||||
}
|
||||
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
g.fillAll (Colours::black.withAlpha (0.6f));
|
||||
|
|
|
|||
|
|
@ -3,33 +3,6 @@
|
|||
{
|
||||
BluetoothManager()
|
||||
{
|
||||
ScanFilter.Builder scanFilterBuilder = new ScanFilter.Builder();
|
||||
scanFilterBuilder.setServiceUuid (ParcelUuid.fromString (bluetoothLEMidiServiceUUID));
|
||||
|
||||
ScanSettings.Builder scanSettingsBuilder = new ScanSettings.Builder();
|
||||
scanSettingsBuilder.setCallbackType (ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
|
||||
.setScanMode (ScanSettings.SCAN_MODE_LOW_POWER)
|
||||
.setScanMode (ScanSettings.MATCH_MODE_STICKY);
|
||||
|
||||
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
|
||||
if (bluetoothAdapter == null)
|
||||
{
|
||||
Log.d ("JUCE", "BluetoothManager error: could not get default Bluetooth adapter");
|
||||
return;
|
||||
}
|
||||
|
||||
BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
|
||||
|
||||
if (bluetoothLeScanner == null)
|
||||
{
|
||||
Log.d ("JUCE", "BluetoothManager error: could not get Bluetooth LE scanner");
|
||||
return;
|
||||
}
|
||||
|
||||
bluetoothLeScanner.startScan (Arrays.asList (scanFilterBuilder.build()),
|
||||
scanSettingsBuilder.build(),
|
||||
this);
|
||||
}
|
||||
|
||||
public String[] getMidiBluetoothAddresses()
|
||||
|
|
@ -48,6 +21,44 @@
|
|||
return getAndroidMidiDeviceManager().isBluetoothDevicePaired (address);
|
||||
}
|
||||
|
||||
public void startStopScan (boolean shouldStart)
|
||||
{
|
||||
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
|
||||
if (bluetoothAdapter == null)
|
||||
{
|
||||
Log.d ("JUCE", "BluetoothManager error: could not get default Bluetooth adapter");
|
||||
return;
|
||||
}
|
||||
|
||||
BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
|
||||
|
||||
if (bluetoothLeScanner == null)
|
||||
{
|
||||
Log.d ("JUCE", "BluetoothManager error: could not get Bluetooth LE scanner");
|
||||
return;
|
||||
}
|
||||
|
||||
if (shouldStart)
|
||||
{
|
||||
ScanFilter.Builder scanFilterBuilder = new ScanFilter.Builder();
|
||||
scanFilterBuilder.setServiceUuid (ParcelUuid.fromString (bluetoothLEMidiServiceUUID));
|
||||
|
||||
ScanSettings.Builder scanSettingsBuilder = new ScanSettings.Builder();
|
||||
scanSettingsBuilder.setCallbackType (ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
|
||||
.setScanMode (ScanSettings.SCAN_MODE_LOW_POWER)
|
||||
.setScanMode (ScanSettings.MATCH_MODE_STICKY);
|
||||
|
||||
bluetoothLeScanner.startScan (Arrays.asList (scanFilterBuilder.build()),
|
||||
scanSettingsBuilder.build(),
|
||||
this);
|
||||
}
|
||||
else
|
||||
{
|
||||
bluetoothLeScanner.stopScan (this);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean pairBluetoothMidiDevice(String address)
|
||||
{
|
||||
BluetoothDevice btDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice (address);
|
||||
|
|
@ -406,27 +417,42 @@
|
|||
return info.getPorts();
|
||||
}
|
||||
|
||||
public String getHumanReadableNameForPort (MidiDeviceInfo.PortInfo port, int portIndexToUseInName)
|
||||
public String getHumanReadableNameForPort (MidiDeviceInfo.PortInfo port, int portIndexToUseInName, boolean addPortNumberToName)
|
||||
{
|
||||
String portName = port.getName();
|
||||
if (addPortNumberToName)
|
||||
{
|
||||
String portName = port.getName();
|
||||
|
||||
if (portName.equals (""))
|
||||
portName = ((port.getType() == MidiDeviceInfo.PortInfo.TYPE_OUTPUT) ? "Out " : "In ")
|
||||
+ Integer.toString (portIndexToUseInName);
|
||||
if (portName.equals(""))
|
||||
portName = ((port.getType() == MidiDeviceInfo.PortInfo.TYPE_OUTPUT) ? "Out " : "In ")
|
||||
+ Integer.toString(portIndexToUseInName);
|
||||
|
||||
return getHumanReadableDeviceName() + " " + portName;
|
||||
return getHumanReadableDeviceName() + " " + portName;
|
||||
}
|
||||
|
||||
return getHumanReadableDeviceName();
|
||||
}
|
||||
|
||||
public String getHumanReadableNameForPort (int portType, int androidPortID, int portIndexToUseInName)
|
||||
{
|
||||
MidiDeviceInfo.PortInfo[] ports = info.getPorts();
|
||||
|
||||
int numTotalPorts = 0;
|
||||
|
||||
for (MidiDeviceInfo.PortInfo port : ports)
|
||||
{
|
||||
if (port.getType() == portType)
|
||||
{
|
||||
numTotalPorts++;
|
||||
}
|
||||
}
|
||||
|
||||
for (MidiDeviceInfo.PortInfo port : ports)
|
||||
{
|
||||
if (port.getType() == portType)
|
||||
{
|
||||
if (port.getPortNumber() == androidPortID)
|
||||
return getHumanReadableNameForPort (port, portIndexToUseInName);
|
||||
return getHumanReadableNameForPort (port, portIndexToUseInName, (numTotalPorts > 1));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -689,6 +715,15 @@
|
|||
int portIdx = 0;
|
||||
MidiDeviceInfo.PortInfo[] ports = physicalMidiDevice.getPorts();
|
||||
|
||||
int numberOfPorts = 0;
|
||||
for (MidiDeviceInfo.PortInfo port : ports)
|
||||
{
|
||||
if (port.getType() == portType)
|
||||
{
|
||||
numberOfPorts++;
|
||||
}
|
||||
}
|
||||
|
||||
for (MidiDeviceInfo.PortInfo port : ports)
|
||||
{
|
||||
if (port.getType() == portType)
|
||||
|
|
@ -700,7 +735,8 @@
|
|||
listOfReturnedDevices.add (path);
|
||||
|
||||
deviceNames.add (physicalMidiDevice.getHumanReadableNameForPort (port,
|
||||
path.portIndexToUseInName));
|
||||
path.portIndexToUseInName,
|
||||
(numberOfPorts > 1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,10 @@
|
|||
return false;
|
||||
}
|
||||
|
||||
public void startStopScan (boolean shouldStart)
|
||||
{
|
||||
}
|
||||
|
||||
public boolean pairBluetoothMidiDevice(String address)
|
||||
{
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue