0

all. I try to create an android cast application with google chromecast. So I tryied to find chromecast with this code:

public void startDiscoveringDevices() {
    DiscoveryManager.init(mContext);
    mDiscoveryManager = DiscoveryManager.getInstance();
    mDiscoveryManager.registerDeviceService(CastService.class, CastDiscoveryProvider.class);
    mDiscoveryManager.setPairingLevel(DiscoveryManager.PairingLevel.ON);
    mDiscoveryManager.setCapabilityFilters(new CapabilityFilter(
            MediaPlayer.Any,
            MediaControl.Any,
            VolumeControl.Any
    ));
    mDiscoveryManager.addListener(this);
    mDiscoveryManager.start();
    Log.wtf("CastDeviceManager", "discovery manager was started");
}

After this I listen DiscoveryManagerListener:

// ********************* My DiscoveryManagerListener ********************************** //
@Override
public void onDeviceAdded(DiscoveryManager manager, ConnectableDevice device) {
    Log.wtf("DiscoveryManagerListener", "Device added");

    device.addListener(...); // Here I pass implementation of ConnectableDeviceListener interface.
    device.connect();  // connect to device
}

@Override
public void onDeviceUpdated(DiscoveryManager manager, ConnectableDevice device) {
    Log.wtf("DiscoveryManagerListener", "Device updated");
    device.addListener(...); // Here I pass implementation of ConnectableDeviceListener interface.
    // try to connect to device, if it not connected yet
    if (device.isConnected()) {
        device.disconnect();
    }
    else {
        device.connect();
    }
}

@Override
public void onDeviceRemoved(DiscoveryManager manager, ConnectableDevice device) {
    Log.wtf("DiscoveryManagerListener", "Device removed");
    mCastDevices.remove(device.hashCode()); // remove device from list of devices
}

@Override
public void onDiscoveryFailed(DiscoveryManager manager, ServiceCommandError error) {
    Log.wtf("DiscoveryManagerListener", "Device(s) not found", error);
    destroyDiscoveryManager();
}
// ************************************************************************************ //


// ************************** My ConnectableDeviceListener **************************** //
@Override
public void onDeviceReady(ConnectableDevice device) {
    Log.wtf("ConnectableDeviceListener", "device ready");
    outDeviceInfo(device, "ConnectableDeviceListener");

    // put to map with devices new connected device
    mCastDevices.put(device.hashCode(), new CastDevice(device, mCastLifecycleListener));
    Log.wtf("ConnectableDeviceListener", "Count cast devices: " + mCastDevices.size());
}

@Override
public void onDeviceDisconnected(ConnectableDevice device) {
    Log.wtf("ConnectableDeviceListener", "device disconnected");
    destroyDiscoveryManager();
}

@Override
public void onPairingRequired(ConnectableDevice device, DeviceService service, PairingType pairingType) {
    Log.wtf("ConnectableDeviceListener", "device paring required");
}

@Override
public void onCapabilityUpdated(ConnectableDevice device, List<String> added, List<String> removed) {
    Log.wtf("ConnectableDeviceListener", "capability updated");
}

@Override
public void onConnectionFailed(ConnectableDevice device, ServiceCommandError error) {
    Log.wtf("ConnectableDeviceListener", "connection failed");
    destroyDiscoveryManager();
}
// ************************************************************************************ //


// this method I use to disconnect from devices in map and stop discovering new devices
public void destroyDiscoveryManager() {
    mDiscoveryManager.stop();
    DiscoveryManager.destroy();
    Log.wtf("CastDeviceManager", "discovery manager was stopped");
    for (Map.Entry<Integer, CastDevice> castDeviceEntry: mCastDevices.entrySet()) {
        castDeviceEntry.getValue().stopCast();
        castDeviceEntry.getValue().disconnect();
        Log.wtf("CastDevice", "device.isConnected(): " + castDeviceEntry.getValue().isConnected());
    }
    mCastDevices.clear();
}

In my Activity I call startDiscoveringDevices() and destroyDiscoveryManager() by buttons. And all was fine, but in one time it stop finding devices. I wasn't change anything in code. Maybe I made something with bugs and it worked, but now something happened and it doesn't work now? What I doing wrong?

Sergey Grishin
  • 392
  • 2
  • 16
  • You may want to report an issue to their [github](https://github.com/googlecast/CastCompanionLibrary-android/issues) or in the [public issue tracker](https://issuetracker.google.com/issues?q=componentid:190205). – Mr.Rebot Aug 18 '17 at 14:36
  • Thank you, it looks like I will do it – Sergey Grishin Aug 19 '17 at 08:53

0 Answers0