以太网插拔
上文是在EthernetManager(frameworks\base\core\java\android\net\EthernetManager)中添加接口onEthernetIfaceRemove():
/**
* A listener interface to receive notification on changes in Ethernet.
*/
public interface Listener {
/**
* Called when Ethernet port's availability is changed.
* @param isAvailable {@code true} if one or more Ethernet port exists.
*/
public void onAvailabilityChanged(boolean isAvailable);
/*
*Called when network wire take out
*/
public void onEthernetIfaceRemove();
}
这种方法很容易导致其他应用因为没有实现onEthernetIfaceRemove()方法而出异常,所以应该放在单独的Listener中。
我们来看EthernetManager中原来的Listener工作流程:
我们实现一般使用时是实现EthernetManager.Listener接口,实现已有的onAvailabilityChanged(boolean isAvailable)方法,如TvSettings中的ConnectivityListener中的:
private final EthernetManager.Listener mEthernetListener = new EthernetManager.Listener() {
@Override
public void onAvailabilityChanged(boolean isAvailable) {
mListener.onConnectivityChange(null);
}
};
然后使用时需要添加这个listener:
EthernetManager mEthernetManager = (EthernetManager) mContext.getSystemService(Context.ETHERNET_SERVICE);
.......
......
mEthernetManager.addListener(mEthernetListener);
不使用时去除这个listener:
mEthernetManager.removeListener(mEthernetListener);
一般这两个方法需要成对出现。
/**
* Adds a listener.
* @param listener A {@link Listener} to add.
* @throws IllegalArgumentException If the listener is null.
*/
public void addListener(Listener listener) {
if (listener == null) {
throw new IllegalArgumentException("listener must not be null");
}
mListeners.add(listener);
if (mListeners.size() == 1) {
try {
mService.addListener(mServiceListener);
} catch (NullPointerException | RemoteException e) {
}
}
}
/**
* Removes a listener.
* @param listener A {@link Listener} to remove.
* @throws IllegalArgumentException If the listener is null.
*/
public void removeListener(Listener listener) {
if (listener == null) {
throw new IllegalArgumentException("listener must not be null");
}
mListeners.remove(listener);
if (mListeners.isEmpty()) {
try { </