Java 跨多个活动使用Android WifiP2P
我在Android应用程序中使用Android Wifi P2P技术在多台设备之间发送简单的数据传输。我正在阅读Wifi p2p的开发者指南,但它的实现似乎只针对一个活动使用Wifi direct服务 按照指南,我创建了这个BroadcastReceiver类来监听Wifi Direct事件: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;
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中取消注册它,以确保只有一个活动接收到该意图。是的,你有一个通用的广播接收器,它总是接收原始意图并将其传递给活动。。。