2013-03-20 1 views
1

Я использую этот код для включения или отключения данных Интернета 3G в своем приложении. Я прочитал несколько вопросов о скрытых функциях отражения и все такое, но он работал очень хорошо в тысячах телефонов с очень разными версиями Android (мое приложение в PlayStore, и у меня не было никаких проблем с ним). Но я беспокоюсь, потому что нашел человека, чей телефон не в состоянии это сделать. Прежде всего позвольте мне показать код, я использую:Включение/выключение проблемы с данными

try 
{ final ConnectivityManager conman = (ConnectivityManager) MyContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if(conman == null) return false; 
    Class conmanClass = Class.forName(conman.getClass().getName()); 
    if(conmanClass == null) return false; 
    Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
    if(iConnectivityManagerField == null) return false; 
    iConnectivityManagerField.setAccessible(true); 
    Object iConnectivityManager = iConnectivityManagerField.get(conman); 
    if(iConnectivityManager == null) return false; 
    Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
    if(iConnectivityManagerClass == null) return false; 
    Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
    if(setMobileDataEnabledMethod == null) return false; 
    setMobileDataEnabledMethod.setAccessible(true); 
    setMobileDataEnabledMethod.invoke(iConnectivityManager, true/false); //Here is where you choose to enable or to disable 
    return true; //Everything went OK 
}catch(Exception e) 
{ return false; 
} 

Ошибка находится в строке:

Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 

С этим результатом:

java.lang.NoSuchFieldException: mService

Этот телефон Samsung Galaxy SII с использованием Jelly Bean 4.1.1 Любые идеи? Я боюсь, что люди начнут сообщать о том же вопросе.

+0

use-permission android: name = "android.permission.MODIFY_PHONE_STATE" /> добавить это разрешение ваш mainfest – QuokMoon

+0

Он был добавлен. Как я уже сказал, он уже работает на многих телефонах. Благодарю. – Ton

ответ

1

По-видимому, Samsung (или, возможно, автор мод ROM) переписал этот класс и больше не имеет элемента данных с именем mService. Это полностью отвечает их правам. Пока их изменение не нарушает ничего, что покрывается CTS, они могут делать то, что хотят, с внутренними реализациями классов инфраструктуры. Вот почему я и другие эксперты Android говорят разработчикам, что они не полагаются на трюки для скриптов-кидди, как то, что вы используете.

Если «включение или отключение интернет-данных 3G» имеет решающее значение для вашего приложения, и вы определяете, что это влияет на запасные диски на Samsung Galaxy SII, вам необходимо заблокировать распространение таких устройств через Play Store.

Если «включение или отключение интернет-данных 3G» не имеет решающего значения для вашего приложения, добавьте в лучший обработчик исключений, чтобы сказать «извините, эта функция недоступна» или некоторые из них.

 Смежные вопросы

  • Нет связанных вопросов^_^