Open bharathnr21 opened 5 years ago
did u solve the problem ? may be i can help
Did you called DiscoveryManager.init(applicationContext) before start?
did u solve the problem ? may be i can help
pl help.
did u solve the problem ? may be i can help
pl help.
its was long time ago, whats ur issue now ?
did u solve the problem ? may be i can help
pl help.
its was long time ago, whats ur issue now ?
when i turn off wifi while Discoverymanager is started, my app is hanged and shows ANR dialog after few seconds..
what to do?
Hello, currently our company is in need of acquiring the source code of the android tv remote application or outsourcing the android developer who used to make that application. Please don't worry about the budget, if caring please contact: nguyenthiduong11a@gmail.com or skype: live: 5fbc1be22b9ce0f4
its was long time ago, whats ur issue now ?
anyone here for help I am facing the same problem I have solved my problem by adding this line mDiscoveryManager.registerDefaultDeviceTypes();
If you go inside DiscoveryManager.getInstance().start() method. We find that it forces code inside the start() method to run on UI Thread which causes ANR when the internet goes off or you use an app for sometime.
public void start() {
if (mSearching)
return;
if (discoveryProviders == null) {
return;
}
mSearching = true;
multicastLock.acquire();
Util.runOnUI(new Runnable() {
@Override
public void run() {
if (discoveryProviders.size() == 0) {
registerDefaultDeviceTypes();
}
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi.isConnected()) {
for (DiscoveryProvider provider : discoveryProviders) {
provider.start();
}
} else {
Log.w(Util.T, "Wifi is not connected yet");
Util.runOnUI(new Runnable() {
@Override
public void run() {
for (DiscoveryManagerListener listener : discoveryListeners)
listener.onDiscoveryFailed(DiscoveryManager.this, new ServiceCommandError(0, "No wifi connection", null));
}
});
}
}
});
}
I clone the connect-sdk project and remove lines inside DiscoveryManager.getInstance().start() method.
public void start() {
if (mSearching)
return;
if (discoveryProviders == null) {
return;
}
mSearching = true;
multicastLock.acquire();
if (discoveryProviders.size() == 0) {
registerDefaultDeviceTypes();
}
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi.isConnected()) {
for (DiscoveryProvider provider : discoveryProviders) {
provider.start();
}
} else {
Log.w(Util.T, "Wifi is not connected yet");
Util.runOnUI(new Runnable() {
@Override
public void run() {
for (DiscoveryManagerListener listener : discoveryListeners)
listener.onDiscoveryFailed(DiscoveryManager.this, new ServiceCommandError(0, "No wifi connection", null));
}
});
}
}
Simply call DiscoveryManager.getInstance().start() from background thread. Now, code inside start() will run in a background thread. Something like that in Kotlin
CoroutineScope(Dispatchers.IO).launch {
DiscoveryManager.getInstance().start()
}
If you go inside DiscoveryManager.getInstance().start() method. We find that it forces code inside the start() method to run on UI Thread which causes ANR when the internet goes off or you use an app for sometime.
Inside DiscoveryManager.getInstance().start() Method
public void start() { if (mSearching) return; if (discoveryProviders == null) { return; } mSearching = true; multicastLock.acquire(); Util.runOnUI(new Runnable() { @Override public void run() { if (discoveryProviders.size() == 0) { registerDefaultDeviceTypes(); } ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { for (DiscoveryProvider provider : discoveryProviders) { provider.start(); } } else { Log.w(Util.T, "Wifi is not connected yet"); Util.runOnUI(new Runnable() { @Override public void run() { for (DiscoveryManagerListener listener : discoveryListeners) listener.onDiscoveryFailed(DiscoveryManager.this, new ServiceCommandError(0, "No wifi connection", null)); } }); } } }); }
I clone the connect-sdk project and remove lines inside DiscoveryManager.getInstance().start() method.
My Changes Look Like This
public void start() { if (mSearching) return; if (discoveryProviders == null) { return; } mSearching = true; multicastLock.acquire(); if (discoveryProviders.size() == 0) { registerDefaultDeviceTypes(); } ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { for (DiscoveryProvider provider : discoveryProviders) { provider.start(); } } else { Log.w(Util.T, "Wifi is not connected yet"); Util.runOnUI(new Runnable() { @Override public void run() { for (DiscoveryManagerListener listener : discoveryListeners) listener.onDiscoveryFailed(DiscoveryManager.this, new ServiceCommandError(0, "No wifi connection", null)); } }); } }
Simply call DiscoveryManager.getInstance().start() from background thread. Now, code inside start() will run in a background thread. Something like that in Kotlin
CoroutineScope(Dispatchers.IO).launch { DiscoveryManager.getInstance().start() }
This won't work
When we call DiscoveryManager.start() app crashing.