首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以从代码打开WiFi-Direct吗?在API-16 (Android 4.2.2)上

我可以从代码打开WiFi-Direct吗?在API-16 (Android 4.2.2)上
EN

Stack Overflow用户
提问于 2013-06-17 16:05:33
回答 5查看 8.1K关注 0票数 3

我正在开发一个与NFC和wifi直接应用程序。我使用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及以上版本的WiFi direct (至少在AOSP上)并不总是活跃的--它只是看起来是活跃的。如果您直接查看WiFi的侦听器,它会在一段时间后自动关闭。然而,如果你打开wifi直接菜单,它就会自动打开。您可能必须让主机执行对等搜索或对其自身进行初始化,才能被找到。很可能是个省电的小把戏。我还发现它是阻塞的,因为当它接受连接时,整个系统将锁定并有时无法连接。(系统邀请)- Mgamerz“

有没有人能建议解决WIFI_P2P_PEERS_CHANGED_ACTION回调不到,只能手动转到设置->wifi->点击wifidirect时才能得到的问题

我使用了两个三星galaxy Nexus7和nexus7设备,这两个设备都运行在4.2.2上

EN

回答 5

Stack Overflow用户

发布于 2013-12-12 07:56:58

没有可用于启用wifiP2P的接口,但您可以从安卓设置4.0.1中调用"enableP2p"方法

代码语言:javascript
复制
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,请使用此方法

代码语言:javascript
复制
Method method1 = manager.getClass().getMethod("disableP2p", Channel.class);
票数 4
EN

Stack Overflow用户

发布于 2013-07-12 05:49:24

而不是来自代码。用户必须这样做。这就是为什么演示程序在操作栏中有指向wifi设置的链接。

当您调用manager.discoverPeers(channel, new WifiP2pManager.ActionListener()时,定义onFailure并查看reasonCode。如果为0,则Wifi或WiFi direct关闭。

如果您查看WiFi直接演示应用程序WifiDirectBroadcast Reciever,这段代码会查看是否专门启用了p2p

代码语言:javascript
复制
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();

        }

然后,当调用discover时,它会查看由setIsWifiP2pEnabled设置的变量

票数 1
EN

Stack Overflow用户

发布于 2014-04-03 00:55:54

谢谢,user3093354。要继续您的解决方案,以禁用您必须调用的p2p:

代码语言:javascript
复制
Method method1 = manager.getClass().getMethod("disableP2p", Channel.class);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17142933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档