android - 我可以从代码中打开 WiFi-Direct 吗? API-16 (Android 4.2.2)

标签 android android-4.2-jelly-bean wifi-direct

我正在开发一个带有 NFC 和 wifi direct 的应用程序。我使用 NFC 和 Wifi Direct 获取 MAC 地址来传输数据。我调用 discoverpeers() 并可以获得成功。但是没有回调 WIFI_P2P_PEERS_CHANGED_ACTION,回调只有在我进入设置并选择 wifidirect 时才会出现。

这在另一个问题中讨论过

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

“我想补充一点,JB 及更高版本(至少在 AOSP 上)的 WiFi direct 并非一直处于 Activity 状态 - 它只是看起来是。如果你查看 WiFi direct 的监听器,它会在之后自动关闭一些时间。但是,如果您打开 wifi 直接菜单,它会自行重新打开。您可能必须让主机进行对等搜索或初始化自身才能被发现。可能是一种节电技巧。我也有发现它是阻塞的,因为当它接受连接时,整个系统有时会锁定并且连接失败。(系统邀请)- Mgamerz "

任何人都可以建议解决问题的解决方案 WIFI_P2P_PEERS_CHANGED_ACTION 回调没有得到,只有在手动转到设置 ->wifi-> 点击 wifidirect 时才能得到

我使用了两台设备 Samsung galaxy nexus 和 nexus 7,它们都运行在 4.2.2 上

最佳答案

没有可用的 API 来启用 wifiP2P 但您可以从 android settings 4.0.1 调用方法 "enableP2p"

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);

关于android - 我可以从代码中打开 WiFi-Direct 吗? API-16 (Android 4.2.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142933/

相关文章:

java - 如何删除布局中的底部分隔线(如线条)?

android - Jelly Bean 上的视频 Intent 出现奇怪错误

android - 忘记旧的 WiFi Direct 连接

android - 如何向 Wifi Direct 服务发现响应添加额外信息?

java - WiFi 直接演示

android - 在Android中,在OnClick中显示按下的按钮动画?

Android 6 EditText.setError 无法正常工作

android - 在 jellybean 中向通知添加操作会忽略使用 setContent 设置的自定义布局

java - 如何从对象中的 getter 中获取数组值?

Android 4 及更高版本,多操作通知