Как создать модем Wi-Fi без совместного использования интернет-соединения (точки доступа) в Android?

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


person Jayaprakash Marshal    schedule 11.12.2014    source источник


Ответы (1)


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

1. Создайте модем Wi-Fi (точка доступа)

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();
    }
}
person Jayaprakash Marshal    schedule 15.12.2014