Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:WifiP2PManager如何将peerList添加到ListView 简介_Java_Android_Wifip2p - Fatal编程技术网

Java Android:WifiP2PManager如何将peerList添加到ListView 简介

Java Android:WifiP2PManager如何将peerList添加到ListView 简介,java,android,wifip2p,Java,Android,Wifip2p,嘿,我正在尝试构建一个Wifi直接P2P客户端,它正在从主机接收数据。在获取数据之前,我需要建立连接,主机应该是组所有者(go_intent=15)。在建立连接之前,我需要知道它是否是我正在寻找的设备。出于测试目的,我想显示我所在区域中处于发现模式的所有设备。这意味着我必须将自己置于发现模式,以便能够从其他设备中被发现 到目前为止,我正在使用startFindPeers()在我的MainActivity.class中启动查找模式,只要我打开交换机,或者当我的wifi在交换机打开时再次启动 当开关

嘿,我正在尝试构建一个Wifi直接P2P客户端,它正在从主机接收数据。在获取数据之前,我需要建立连接,主机应该是组所有者(go_intent=15)。在建立连接之前,我需要知道它是否是我正在寻找的设备。出于测试目的,我想显示我所在区域中处于发现模式的所有设备。这意味着我必须将自己置于发现模式,以便能够从其他设备中被发现

到目前为止,我正在使用
startFindPeers()
在我的
MainActivity.class中启动查找模式,只要我打开交换机,或者当我的wifi在交换机打开时再次启动

当开关打开时,即使我关闭应用程序并清除RAM,只要我的wifi仍然打开,我也应该可以被发现

问题 我的问题在于
WifiP2pManager.peerlistener
,当我的
WiFiDirectBroadcastReceiver.class中的
WIFI\u P2P\u PEERS\u动作发生变化时就会触发。
我可以使用触发我的
peerListener
的回调函数检查新的对等点是否在附近

peerListener
本身中,会触发
onpeersavable
函数,该函数会将所有新的对等方添加到我的
activity\u main.xml
的列表视图中,但它不会

有什么建议吗

代码 显示


activity_main.xml


主课

package de.tu_chemnitz.dayliehelperprototype;
进口*
导入de.tu_chemnitz.dayliehelperprototype.utils.Utility;
公共类MainActivity扩展了AppCompatActivity{
专用静态最终字符串NETWORK\u STATE=“NETWORK\u STATE”;
//UI元素
切换开关通知;
列表视图列表视图;
//无线直达
WIFIP2P经理;
WifiP2pManager.Channel;
广播接收机;
IntentFilter IntentFilter;
List peers=new ArrayList();
字符串[]deviceNameArray;
wifip2p设备[]设备阵列;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//定义UI元素
switchNotify=findviewbyd(R.id.notify\u开关);
listView=findViewById(R.id.peerListView);
初始化为fidirect();
//定义工具栏
setSupportActionBar((工具栏)findViewById(R.id.Toolbar));
//加载默认开关状态[false],否则从SharedReferences获取它
boolean state=Utility.getBool(这是“开关状态”、“通知开关键”);
switchNotify.setChecked(状态);
setOnCheckedChangeListener(监听器);
}
@凌驾
受保护的void onResume(){
super.onResume();
注册接收者(接收者、意图过滤器);
}
@凌驾
受保护的void onPause(){
super.onPause();
未注册接收人(接收人);
}
WifiP2pManager.peerlistner peerlistner=新的WifiP2pManager.peerlistner(){
@凌驾
PeersAvailable上的公共无效(WifiP2pDeviceList peerList){
如果(!peerList.getDeviceList().equals(peers)){
peers.clear();
peers.addAll(peerList.getDeviceList());
deviceNameArray=新字符串[peerList.getDeviceList().size()];
deviceArray=new WifiP2pDevice[peerList.getDeviceList().size()];
int指数=0;
//也许我们可以在这里得到更多的信息
for(WifiP2pDevice设备:peerList.getDeviceList()){
deviceNameArray[索引]=device.deviceName;
deviceArray[索引]=设备;
索引++;
}
Log.d(“这是我的数组”,“arr:+Arrays.toString(deviceNameArray));
ArrayAdapter=新的ArrayAdapter(MainActivity.this,android.R.layout.simple\u list\u item\u 1,deviceNameArray);
setAdapter(适配器);
}
if(peers.size()==0){
Log.d(“WIFIDIRECT”,“未找到设备”);
}
}
};
/**
*一旦检查交换机的侦听器
*/
CompoundButton.OnCheckedChangeListener侦听器=新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查){
if(Utility.isWiFiEnabled(MainActivity.this)){
Utility.customToastMsg(MainActivity.this,“Enabled”和“1abc9c”);
startFindPeers();
}
否则{
switchNotify.setChecked(false);
Utility.customToastMsg(MainActivity.this,“Wifi已禁用”,“#FFB900”);
isChecked=false;
}
}否则{
Utility.customToastMsg(MainActivity.this,“Disabled”和“ef5350”);
stopFindPeers();
}
//保存当前状态[选中/未选中]
saveBool(MainActivity.this,“开关状态”,“通知开关键”,已选中);
}
};
public void startFindPeers(){
if(manager!=null){
manager.discoverPeers(通道,新的WifiP2pManager.ActionListener(){
@凌驾
普布利