2014-12-11 4 views
2

У меня есть Android-устройство (OS_VERSION 4.0). Я хотел бы поделиться файлами с другим устройством Android через Wi-Fi-сети. Я знаю, это можно сделать через wifi p2p (WifiDirect) в android 4.0 выше. Но это невозможно в устройствах Android 2.3.3 (до Android 4.0). Я обнаружил, что приложение Superbeam использует общий доступ к файлам через общие сети в android 2.3.3. Это приложение создает Wi-Fi-модем, не разделяя интернет-соединение устройства. Созданный модем используется только для обмена файлами, не предназначенными для совместного использования Интернета. Как достичь этой концепции. Может кто-нибудь мне помочь?Как создать Wi-Fi-модем без совместного доступа к Интернету (Hotspot) в Android?

ответ

1

Этот ответ может помочь кому-то с тем же вопросом. Простая логика я реализована в том,

1.Create WiFi привязывать (Hotspot)

2. Отключите соединение мобильной передачи данных

Кодекс,

//To enable the wifi hotspot 
setWifiTetheringEnabled(true);  

//To disable the mobile data cnnection 
setMobileDataEnabled(false); 

private void setWifiTetheringEnabled(boolean enable) { 
    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 

    Method[] methods = wifiManager.getClass().getDeclaredMethods(); 
    for (Method method : methods) { 
     if (method.getName().equals("setWifiApEnabled")) { 
      try { 
       method.invoke(wifiManager, null, enable); 
      } catch (Exception ex) { 
      } 
      break; 
     } 
    } 
} 


private void setMobileDataEnabled(Context context, boolean enabled) { 
    try { 
     final ConnectivityManager conman = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     final Class conmanClass = Class 
       .forName(conman.getClass().getName()); 
     final Field iConnectivityManagerField = conmanClass 
       .getDeclaredField("mService"); 
     iConnectivityManagerField.setAccessible(true); 
     final Object iConnectivityManager = iConnectivityManagerField 
       .get(conman); 
     final Class iConnectivityManagerClass = Class 
       .forName(iConnectivityManager.getClass().getName()); 
     final Method setMobileDataEnabledMethod = iConnectivityManagerClass 
       .getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
     setMobileDataEnabledMethod.setAccessible(true); 

     setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled); 
    } catch (ClassNotFoundException | NoSuchFieldException 
      | IllegalAccessException | IllegalArgumentException 
      | NoSuchMethodException | InvocationTargetException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
}