Java 跨多个活动使用Android WifiP2P

Java 跨多个活动使用Android WifiP2P,java,android,android-wifi,wifi-direct,wifip2p,Java,Android,Android Wifi,Wifi Direct,Wifip2p,我在Android应用程序中使用Android Wifi P2P技术在多台设备之间发送简单的数据传输。我正在阅读Wifi p2p的开发者指南,但它的实现似乎只针对一个活动使用Wifi direct服务 按照指南,我创建了这个BroadcastReceiver类来监听Wifi Direct事件: import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context;

我在Android应用程序中使用Android Wifi P2P技术在多台设备之间发送简单的数据传输。我正在阅读Wifi p2p的开发者指南,但它的实现似乎只针对一个活动使用Wifi direct服务

按照指南,我创建了这个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的活动制作接收器?如何将连接传递到不同的活动,而不必每次都建立连接(即查找对等点、连接到对等点等)?

虽然回答太晚,但由于没有人回答,我考虑提供解决方案

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

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

希望这有帮助

我看不出您是如何使用该活动的。所以,即使你移除它,你也可能很好。。。。有时你可以用上下文替换活动…例如,在一个活动中,我列出了同龄人。另一方面,我在传输数据。这些活动有不同的方法,因此我如何选择将对象强制转换到哪个活动类,以便调用适当的方法?首先要说的是,不要尽可能多地将活动作为参数传递,因为它可能会导致内存泄漏。解决方案可能是,您可以发送一个广播接收器(使用),只需将您在类中接收到的意图传递给活动中的其他接收器。。。如果你想的话,我可以发代码。。。。但是你所需要的只是我在这里提到的教程…所以我应该在app load上静态地创建一个主广播接收器,并使用它的onReceive发送一个本地广播,将数据传递给适当的活动?所以你应该在每个活动中创建一个广播接收器。但请确保您使用的是localbroadcastmanager,并记住在onResume中注册它,在onPause中取消注册它,以确保只有一个活动接收到该意图。是的,你有一个通用的广播接收器,它总是接收原始意图并将其传递给活动。。。