2013-10-15 2 views
6

Я задал этот вопрос, но ответа не получил.Мобильный телефон не включен

Я использовал следующий код для включения мобильных данных (3G).

private static void setMobileDataEnabled(Context context, boolean enabled){ 

      try{ 
       ConnectivityManager conman = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
       Method setMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class); 
       setMobileDataEnabledMethod.setAccessible(true); 
       setMobileDataEnabledMethod.invoke(conman, enabled); 

      }catch(NoSuchMethodException e){e.printStackTrace();} 
      catch(InvocationTargetException e){e.printStackTrace();} 
      catch(IllegalAccessException e){e.printStackTrace();} 

     } 

Я называю это так:

setMobileDataEnabled(getBaseContext(), true/false); 

Это позволит/правильно отключить мобильные данные, но этот код не работает корректно на устройствах Dual SIM. Я тестировал его на Motorola Razr D1, D3, в Samsung Dual-SIM (теперь не помню), но этот код не работает. Все работает нормально, приложение не падает.

Вместо «getBaseContext()» я попытался «getApplicationContext()» и «this», но ничего не изменилось.

Я узнал, что Android не предназначен для устройств с двумя чипами, это может быть проблемой, поскольку я не могу настроить таргетинг на любую SIM-карту, поэтому я не могу найти какой-либо трюк или что-нибудь еще, чтобы «исправить», код, я прав?

Что я могу сделать для включения или выключения мобильных данных на устройствах с двумя чипами? Я взглянул на Исходные коды, setMobileDataEnabled является «общедоступным», whe не должен иметь к нему доступ?

Я также нашел класс IConnectivityManager, но это не расширение Java, я думаю, что это .aidl или что-то (не помню), это может быть полезно?

Я не знаю, что делать, пожалуйста, мне нужна помощь.

Извините за мой английский.

Спасибо.

+0

Реализация Dual-SIM может быть проприетарной базой кода, которая является кодовой базой AOSP. Это я считаю причиной отсутствия метода, который вы ищете. –

ответ

1

попробуйте эту ссылку Enable/Disable Mobile Data (GPRS) using code

Использование универсального метода всегда порекомендован. Тем не менее, ваш код может работать только с API 8/API 10. Добавили ли вы разрешения в файл манифеста Android? Проверьте первый ответ на связанный вопрос и выполните его.

Если он не работает, проверьте второй, идентичный вашему коду. Но, я порекомендую первый метод, потому что таким образом вам не придется писать код для каждого API отдельно. Кроме того, как сказал @tdevinda, код может отличаться от версий устройств от одного устройства к одному, от одного sim-to-multi-sim, gsm-cdma-wcdma, уровня API и производителей устройств. Я надеюсь, что это поможет :)

EDIT: Официальной информации с сайта разработчиков Android пока нет. Однако, вы можете подать запрос. Я также не смог найти решение. Проблема Dual-sim не решена.

EDIT 2: Проверьте изображение. Solution Trick

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