2013-06-17 2 views
3

Я разрабатываю приложение с прямым NFC и Wi-Fi. Я получаю MAC-адрес, используя NFC и Wifi Direct для передачи данных. Я вызываю Discoverpeers() и могу добиться успеха. Но нет обратного вызова WIFI_P2P_PEERS_CHANGED_ACTION, обратный вызов приходит только тогда, когда я перехожу к настройкам и выбираю wifidirect.Могу ли я включить WiFi-Direct из кода? на API-16 (Android 4.2.2)

Об этом шла речь в другом вопросе

Can I turn on WiFi-Direct from code? on Android API-14 (ICS)

«Я хотел бы добавить, что Wi-Fi непосредственно на JB и выше (по крайней мере, на AOSP) не активен все время - он появляется только Если вы посмотрите на слушателей для Wi-Fi напрямую, он выключится через некоторое время. Однако он снова включится, если вы откроете прямое меню wifi. Возможно, вам нужно, чтобы хост выполнял одноранговый поиск или инициализировал себя в я также обнаружил, что он блокирует, так как, когда он принимает соединение, вся система будет блокироваться и иногда не подключаться (системное приглашение) - Mgamerz "

Может кто-нибудь предложить решение проблемы WIFI_P2P_PEERS_CHANGED_ACTION обратного вызова не заводится и может получить только тогда, когда вручную перейти в Настройки-> wifi-> нажмите на wifidirect

Я использовал два устройства Samsung Galaxy Nexus и Nexus 7 оба выполняются на 4.2.2

ответ

0
//Try this it may be help you 

WifiManager wifiManager = (WifiManager)this.getSystemService(this.WIFI_SERVICE); 
wifiManager.setWifiEnabled(true);  //True - to enable WIFI connectivity . 
             //False -disable WIFI connectivity. 

//add this permissions in Manifest file : 


    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 
+0

Спасибо.Но я ищу wifi direct – iamshanmu

+0

@Mgamerz я связался с почтой, где вы прокомментировали – iamshanmu

1

Не из кода. Пользователь должен. Вот почему демо имеет ссылку на настройки wifi в панели действий.

Когда вы позвоните manager.discoverPeers(channel, new WifiP2pManager.ActionListener() , определите onFailure и посмотрите на reasonCode. Если это 0, то отключается Wi-Fi или WiFi.

Если вы посмотрите на Wi-Fi Direct демо-приложение, то WifiDirectBroadcast Reciever, этот кусок кода смотрит включен ли p2p специально

public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { 

     // UI update to indicate wifi p2p status. 
     int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1); 
     if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) { 
      // Wifi Direct mode is enabled 
      activity.setIsWifiP2pEnabled(true); 
     } else { 
      activity.setIsWifiP2pEnabled(false); 
      activity.resetData(); 

     } 

Затем, когда обнаруживают сверстникам, называется он смотрит на переменную, установленной setIsWifiP2pEnabled

+0

@jabaldonedo в 4.2.2. В настройках нет возможности включить. Моя проблема заключается в обратном вызове WIFI_P2P_PEERS_CHANGED_ACTION, только если я перехожу к настройкам, выберите wifidirect. Примечание. Выбор не включен – iamshanmu

2

Там нет доступных API, чтобы позволить wifiP2P, но вы можете вызвать метод «enableP2p» от андроида настроек 4.0.1

WifiP2pManager manager = (WifiP2pManager) getActivity().getSystemService(Context.WIFI_P2P_SERVICE); 
Channel channel = manager.initialize(getActivity(), getActivity().getMainLooper(), null); 

try { 
      Method method1 = manager.getClass().getMethod("enableP2p", Channel.class); 
      method1.invoke(manager, channel); 
      //Toast.makeText(getActivity(), "method found", 
      //  Toast.LENGTH_SHORT).show(); 
} catch (Exception e) { 
      //Toast.makeText(getActivity(), "method did not found", 
       // Toast.LENGTH_SHORT).show(); 
     } 

Для отключения wifiP2P используйте этот метод

Method method1 = manager.getClass().getMethod("disableP2p", Channel.class); 
+0

на моем LG P769 (android 4.1.2), «метод не найден». хотя менеджер и канал не равны нулю. Поддерживает ли мой телефон прямой Wi-Fi? – user1462586

0

спасибо пользователю3093354. чтобы продолжить решение для того, чтобы отключить p2p вы должны вызвать:

Method method1 = manager.getClass().getMethod("disableP2p", Channel.class); 
+1

Используйте это изменение, чтобы добавить эту информацию в ответ –

0

Вы можете загрузить драйвер WiFi из командной строки с требуемым уровнем параллелизма, если вы укоренены:

/системы/бен/insmod /system/lib/modules/wlan.ko con_mode = 3

Эти значения:
typedef enum { VOS_STA_MODE=0, VOS_STA_SAP_MODE=1, VOS_P2P_CLIENT_MODE, VOS_P2P_GO_MODE, VOS_MONITOR_MODE, VOS_FTM_MODE = 5, VOS_IBSS_MODE, VOS_P2P_DEVICE_MODE, VOS_MAX_NO_OF_MODE } tVOS_CON_MODE;

Это для карты Atheros.