最近,我按照Developer.Android.Com给出的步骤进行操作
但似乎我在那边有些运气。我试图发现附近的可用对等方,将它们放入arraylist,但似乎没有运气。我什么都没得到。
我的实际2个设备实际上是android 4.1和4.2,因为Wifi Direct基于API级别14(即Android
4.0+),所以我认为我的真实设备不是问题。
我使用的概念是使用1个活动和1个BroadCast Receiver。
请看一下我的代码,是我写错了还是忘记了什么?
Chat1Activity.java
package com.example.androtut;
import java.util.ArrayList;
import others.MyBroadcastReceiver;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.net.wifi.p2p.WifiP2pDeviceList;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager.Channel;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class Chat1Activity extends Activity {
private final IntentFilter mintentFilter = new IntentFilter();
private Channel mChannel;
private WifiP2pManager mManager;
private BroadcastReceiver mReceiver;
private ArrayList peers = new ArrayList();
private PeerListListener myPeerListListener = new PeerListListener() {
@Override
public void onPeersAvailable(WifiP2pDeviceList peerList) {
// Out with the old, in with the new.
peers.clear();
peers.addAll(peerList.getDeviceList());
// If an AdapterView is backed by this data, notify it
// of the change. For instance, if you have a ListView of available
// peers, trigger an update.
if (peers.size() == 0) {
Toast.makeText(getApplicationContext(),"Nothing found!", Toast.LENGTH_LONG).show();
return;
} else {
Toast.makeText(getApplicationContext(),"We've found " + peers.size() + " users", Toast.LENGTH_LONG).show();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
html" target="_blank">setContentView(R.layout.activity_chat1);
//Toast.makeText(getApplicationContext(), "Wifi is okay", Toast.LENGTH_LONG).show();
prepareIntentFilter();
Button btn_startchat = (Button) findViewById(R.id.btn_startchat);
// Listening to News Feed button click
btn_startchat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Launching News Feed Screen
detectPeers();
}
});
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), null);
}
private void detectPeers(){
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
// Code for when the discovery initiation is successful goes here.
// No services have actually been discovered yet, so this method
// can often be left blank. Code for peer discovery goes in the
// onReceive method, detailed below.
}
@Override
public void onFailure(int reasonCode) {
// Code for when the discovery initiation fails goes here.
// Alert the user that something went wrong.
}
});
}
@Override
protected void onResume() {
super.onResume();
mReceiver = new MyBroadcastReceiver(mManager, mChannel, this, myPeerListListener);
registerReceiver(mReceiver, mintentFilter);
}
/* unregister the broadcast receiver */
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
private void prepareIntentFilter() {
mintentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
// Indicates a change in the list of available peers.
mintentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
// Indicates the state of Wi-Fi P2P connectivity has changed.
mintentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
// Indicates this device's details have changed.
mintentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
}
}
还有 MyBroadcastReceiver.java
package others;
import java.util.ArrayList;
import com.example.androtut.Chat1Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.p2p.WifiP2pDevice;
import android.net.wifi.p2p.WifiP2pDeviceList;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager.Channel;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
import android.widget.Toast;
public class MyBroadcastReceiver extends BroadcastReceiver {
private WifiP2pManager mManager;
private Channel mChannel;
private Chat1Activity mActivity;
private PeerListListener myPeerListListener;
public MyBroadcastReceiver(WifiP2pManager manager, Channel channel,
Chat1Activity activity, PeerListListener obPeerList) {
super();
this.mManager = manager;
this.mChannel = channel;
this.mActivity = activity;
this.myPeerListListener = obPeerList;
}
@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
if (mManager != null) {
mManager.requestPeers(mChannel, myPeerListListener);
}
} 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
}
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
// Wifi P2P is enabled
Toast.makeText(mActivity.getApplicationContext(),"Wifi is okay", Toast.LENGTH_LONG).show();
} else {
// Wi-Fi P2P is not enabled
Toast.makeText(mActivity.getApplicationContext(),
"Wifi is not okay", Toast.LENGTH_LONG).show();
}
}
}
}
我想您没有将PeerListListener添加到您的活动中。因此不会回复。
您可以尝试在活动中实现PeerListListener
public class Chat1Activity extends Activity implements WifiP2pManager.PeerListListener
并在您的活动中覆盖onPeerAvailable方法
@Override
public void onPeersAvailable(WifiP2pDeviceList peers) {
//put your code here
}
并在Receiver中更改requestPeers方法
if (mManager != null) {
mManager.requestPeers(mChannel, mActivity);
}
希望这个帮助!
问题内容: 我正在研究通过多个Android设备之间的Wi-Fi Direct连接进行广播的可能性。我创建了一个简单的消息广播应用程序来测试它是否有效,但是到目前为止,我还无法广播消息。当我尝试发送数据包时,出现 SocketException (网络无法访问): 这是我的代码的本质: 有谁知道在 Android 设备上通过Wi-Fi Direct广播是否真的有效?如果它可以正常工作,我在做什么错
可进行Wi-Fi连接的各种相关设定。 Wi-Fi 轻触方格,即可停用Wi-Fi功能。 接入点 会显示已保存或搜索到的接入点。曾经连接过1次的接入点,下次起会自动连接。 若轻触已保存的接入点,可进行连接测试或详细设定。 A ) 正在搜索接入点 B ) 加密 此接入点设定了加密。若要连接,需输入接入点设定的WEP密钥/WPA密钥。 C ) 接入点的信号强度 以无信号及3个等级的强度显示。 若已保存多个
问题内容: 有什么方法可以向连接到特定Wi-Fi网络的设备发送通知? 说,我有一个名为“我的Wi-Fi”的Wi-Fi网络,该网络不安全,任何人都可以连接。公共网络。 可能有N个用户连接到“我的Wi-Fi”。这些用户可以执行任何类型的交易,例如在线支付。 现在,如果我想关闭或关闭“我的Wi-Fi”路由器或接入点,这些交易可能会失败。 因此,在关闭之前,我想向连接到“我的Wi-Fi”网络的所有用户发送
有没有办法向连接到特定Wi-Fi网络的设备发送通知? 比方说,我有一个名为“我的Wi-Fi”的Wi-Fi网络,它是不安全的,即任何人都可以连接。公共网络。 可能有N个用户连接到“我的Wi-Fi”。这些用户可以执行任何类型的交易,例如在线支付。 现在,如果我想关闭或关闭“我的Wi-Fi”路由器或接入点,这些交易可能会失败。 所以在关闭之前,我想向所有连接到“我的Wi-Fi”网络的用户发送一条文本通知
1. 开始连接无线网络()密码() 连接到指定无线网络。 示例: 光环板启动后,开始连接到无线网络“Maker-guest”。 2. 网络已连接? 如果网络已连接,报告条件成立。 示例: 光环板启动后,开始连接到无线网络“Maker-guest”。等网络连接成功后,所有LED灯亮起绿色。 3. 识别()语音()秒钟 识别指定语言(汉语或英语)语音指定时间。 示例: 光环板启动后,识别汉语语音3秒钟
Wi-Fi模块能够在平板电脑、手机和模块间建立无线Wi-Fi连接,可结合云服务实现IoT功能。 净重量:25.7g 体积:48×48×14mm 参数 无线标准:IEEE 802.11b/g/n(HT20) 频带范围:2412~2462MHz 工作模式:STA/AP/STA+AP 通信柜离:10m(空旷环境下) 工作电压:DC 5V 工作电流:200mA FCC ID:2AH9Q-NU001WF 抗