2015-07-07 1 views
1

Мое приложение должно проверить, есть ли доступный USB-интерфейс. Для этого он использует отражение для вызова getTetherableIfaces в ConnectivityManager.java.lang.NoSuchMethodException: getTetherableIfaces on Lollipop

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
Class cmClass = Class.forName(cm.getClass().getName()); 
Method method = cmClass.getDeclaredMethod("getTetherableIfaces"); 
method.setAccessible(true); 
method.invoke(cm, args); 

Я проверил это на LG Leon работает Android 5.0.1 и он терпит неудачу с java.lang.NoSuchMethodException.

Была ли эта функция удалена или изменена в Lollipop?

ответ

1

Согласно http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.1_r1/android/net/ConnectivityManager.java#ConnectivityManager.getTetherableIfaces%28%29 метод все еще существует.

Возможно, вам стоит попробовать ConnectivityManager.class.getDeclaredMethod("getTetherableIfaces").

Вы пытались просмотреть список всех меток для диспетчера связей? Можете ли вы показать нам журналы следующего кода.

Method[] methodArray = ConnectivityManager.class.getMethods(); 
for (Method method : methodArray) { 
    Log.v(TAG, method.getName()); 
} 
+0

ConnectivityManager.class.getDeclaredMethod работал, спасибо. После отладки устройства я обнаружил, что context.getSystemService (Context.CONNECTIVITY_SERVICE) возвращает подкласс ConnectivityManager, а вызов метода getDeclaredMethod в этом экземпляре возвращает только методы подкласса, а не методы в ConnectivityManager. Вызов getMethod - правильное решение. – migueljuan