3

我在我的 android 应用程序中使用 Android Wifi P2P 技术在多个设备之间发送简单的数据传输。我正在阅读 Wifi p2p 的开发人员指南,但该实现似乎只是为使用 Wifi 直接服务的一项活动而构建的。

按照指南,我创建了这个 BroadcastReceiver 类来监听 Wifi Direct 事件:

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager.Channel;

public class WifiDirectBroadcastReceiver extends BroadcastReceiver {
    private WifiP2pManager manager;
    private Channel channel;
    private WifiActivity activity;

    public WifiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel, WifiActivity activity){
        this.manager = manager;
        this.channel = channel;
        this.activity = activity;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)){
            // Check to see if Wi-Fi is enabled and notify appropriate activity
        }else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)){
            // Call WifiP2pManager.requestPeers() to get a list of current peers
        }else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)){
            // Respond to new connection or disconnections
        }else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)){
            // Respond to this device's wifi state changing
        }
    }
}

但是,构造函数似乎只适用于一项活动。我是否必须为每个使用 Wifi Direct 的活动制作接收器?我如何将连接传递给不同的活动,而不必每次都建立连接(即查找对等点、连接到对等点等)?

4

1 回答 1

4

虽然回答太晚了,但由于没有人回答,所以我想提供解决方案。

您需要使用多个活动注册广播接收器,并使用以下代码更改您的构造函数

public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel,Context activity) {
        super();
        this.manager = manager;
        this.channel = channel;
        this.activity = activity;
    }

在任何需要根据活动更改代码的地方,只需检查一下

if(activity instanceof yourActivityName){
// your code based on the current activity
}

并在您的活动中注册您的广播接收器

receiver = new WiFiDirectBroadcastReceiver(manager, channel, this);
        registerReceiver(receiver, intentFilter);

希望这可以帮助

于 2018-02-10T17:34:56.760 回答