wifi的使用
来源:互联网 发布:linux查询cpu使用率 编辑:程序博客网 时间:2024/06/05 21:17
1.获取系统权限
<uses-permission android:name="android.permission.INTERNET" android:required="true"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" android:required="true"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" android:required="true"/>
2.主函数
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { private final IntentFilter intentFilter = new IntentFilter(); private WifiP2pManager.Channel mChannel; private WifiP2pManager mManager; private WiFiDirectBroadcastReceiver receiver; private List<WifiP2pDevice> peers = new ArrayList(); private List<String> peersStr = new ArrayList<>(); private ListView lv; private ArrayAdapter<String> mAdapter;// private WifiP2pManager.PeerListListener peerListListener = new WifiP2pManager.PeerListListener() {// @Override// public void onPeersAvailable(WifiP2pDeviceList peerList) {//// //旧的不去,新的不来// peers.clear();// peers.addAll(peerList.getDeviceList());//// //如果AdapterView可以处理该数据,则把变更通知它。比如,如果你有可用对等点的ListView,那就发起一次更新。// // ((WiFiPeerListAdapter) getListAdapter()).notifyDataSetChanged();// if (peers.size() == 0) {// Log.d("sxl", "No devices found");// return;// }// }// } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //表示Wi-Fi对等网络状态发生了改变 intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); //表示可用的对等点的列表发生了改变 intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); //表示Wi-Fi对等网络的连接状态发生了改变 intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); //设备配置信息发生了改变 intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION); mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); mChannel = mManager.initialize(this, getMainLooper(), null); lv = (ListView) findViewById(R.id.lv); mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,peersStr); lv.setAdapter(mAdapter); lv.setOnItemClickListener(this); } @Override protected void onResume() { super.onResume(); receiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this); registerReceiver(receiver, intentFilter); } @Override protected void onPause() { super.onPause(); unregisterReceiver(receiver); } //点击搜索周围wifiDirect设备 public void onClick(View view) { mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { //查找初始化成功时的处理写在这里。 //实际上并没有发现任何服务,所以该方法可以置空。 //对等点搜索的代码在onReceive方法中,详见下文。 } @Override public void onFailure(int reasonCode) { Log.e("sxl","sxl discoverPeers() onFailure reasonCode="+reasonCode); //查找初始化失败时的处理写在这里。 //警告用户出错了。 } }); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { WifiP2pDevice peer = peers.get(pos); connect(peer);//连接 } public void connect(final WifiP2pDevice device) { Log.i("sxl", "connect: "); WifiP2pConfig config = new WifiP2pConfig(); config.deviceAddress = device.deviceAddress;//mac地址 config.wps.setup = 0; mManager.connect(mChannel, config, new WifiP2pManager.ActionListener() { public void onSuccess() { Log.e("sxl", "connect onSuccess: "+device.deviceAddress); } public void onFailure(int reason) { Log.e("sxl", "connect onFailure: " + reason); } }); } class WiFiDirectBroadcastReceiver extends BroadcastReceiver{ private WifiP2pManager mManager; private WifiP2pManager.Channel mChannel; private Activity activity; public WiFiDirectBroadcastReceiver(WifiP2pManager manager, WifiP2pManager.Channel channel, Activity activity){ this.mManager = manager; this.mChannel = 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)) { //确定Wi-Fi Direct模式是否已经启用,并提醒Activity。 int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1); if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {// activity.setIsWifiP2pEnabled(true); } else {// activity.setIsWifiP2pEnabled(false); } } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { //发现周围设备变化 mManager.requestPeers(mChannel, new MypeerListListener()); } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { //连接状态已经改变!需要获取IP NetworkInfo device1 = (NetworkInfo)intent.getParcelableExtra("networkInfo"); if(device1.isConnected()) { Log.i("sxl", "onReceive: WIFI_P2P_CONNECTION_CHANGED_ACTION networkInfo.isConnected()"); this.mManager.requestConnectionInfo(this.mChannel, new WifiP2pManager.ConnectionInfoListener() { public void onConnectionInfoAvailable(WifiP2pInfo info) { final String ip = info.groupOwnerAddress.getHostAddress(); Log.e("sxl", "ip =" + ip + ","+getWFDMacAddress()); } }); } } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {// DeviceListFragment fragment = (DeviceListFragment) activity.getFragmentManager()// .findFragmentById(R.id.frag_list);// fragment.updateThisDevice((WifiP2pDevice) intent.getParcelableExtra(// WifiP2pManager.EXTRA_WIFI_P2P_DEVICE)); } } } class MypeerListListener implements PeerListListener{ public void onPeersAvailable(WifiP2pDeviceList wifiP2pDeviceList) { Log.i("sxl", "onPeersAvailable:"); MainActivity.this.peers.clear(); MainActivity.this.peersStr.clear(); MainActivity.this.peers.addAll(wifiP2pDeviceList.getDeviceList()); for (int i = 0; i <MainActivity.this.peers.size() ; i++) { MainActivity.this.peersStr.add(MainActivity.this.peers.get(i).toString()); } MainActivity.this.mAdapter.notifyDataSetChanged(); int size = MainActivity.this.peers.size(); Log.i("sxl", "onPeersAvailable: size " + size); for(int i = 0; i < size; ++i) { Log.e("sxl", i + " onPeersAvailable: for " + ((WifiP2pDevice)MainActivity.this.peers.get(i)).deviceName); Log.i("sxl", i + " onPeersAvailable: mac " + ((WifiP2pDevice)MainActivity.this.peers.get(i)).deviceAddress); Log.i("sxl", ""); } } }; public String getWFDMacAddress() { try { ArrayList interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); Iterator var2 = interfaces.iterator(); while(var2.hasNext()) { NetworkInterface ntwInterface = (NetworkInterface)var2.next(); if(ntwInterface.getName().equalsIgnoreCase("p2p0")) { byte[] byteMac = ntwInterface.getHardwareAddress(); if(byteMac == null) { return ""; } StringBuilder strBuilder = new StringBuilder(); for(int i = 0; i < byteMac.length; ++i) { strBuilder.append(String.format("%02X:", new Object[]{Byte.valueOf(byteMac[i])})); } if(strBuilder.length() > 0) { strBuilder.deleteCharAt(strBuilder.length() - 1); } return strBuilder.toString(); } } } catch (Exception var7) { ; } return ""; }}
发送的class
public class SendText { protected int port = 8998; protected Socket socket; protected Writer writer; protected BufferedReader br; public SendText(final String host, final String msg) { (new Thread(new Runnable() { public void run() { try { SendText.this.socket = new Socket(host, SendText.this.port); SendText.this.writer = new OutputStreamWriter(SendText.this.socket.getOutputStream(), "UTF-8"); SendText.this.br = new BufferedReader(new InputStreamReader(SendText.this.socket.getInputStream(), "UTF-8")); } catch (UnknownHostException var5) { var5.printStackTrace(); } catch (IOException var6) { var6.printStackTrace(); } try { if(SendText.this.writer == null) { System.out.println("write is null"); return; } SendText.this.writer.write(msg); SendText.this.writer.write("eof\n"); SendText.this.writer.flush(); SendText.this.writer.close(); SendText.this.socket.close(); } catch (IOException var4) { var4.printStackTrace(); try { SendText.this.writer.close(); SendText.this.socket.close(); } catch (IOException var3) { var3.printStackTrace(); } } } })).start(); }}
3.主布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="alice.bw.com.wifidirectdemo.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="搜索周围wifiDirect设备"/> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv"></ListView></LinearLayout>
阅读全文
0 0
- Android Wifi的使用
- Android Wifi的使用
- wifi的使用
- Wifi控件的使用
- Wifi的初步使用
- wifi的使用
- 关于使用wifi的困惑
- Android中wifi的使用
- android 下的wifi使用
- wifi使用的一些误区
- 树莓派3的wifi使用
- Android 中wifi的使用
- esp8266 wifi模块的使用
- 安卓的wifi使用
- Android Studio使用Wifi调试的方法:使用ADB WIFI
- Android Studio使用Wifi调试的方法:使用ADB WIFI
- WIFI机型的wifi使用简单图文教程
- linux wifi 8192移植 及部分wifi工具的使用
- tiaozhuanyemian
- 一些基本的依赖
- NSetup 轻松一键,部署NSIS美化打包安装和自动增量升级 (包含 nsSkinEngine)
- 运算符格式控制符
- 欢迎使用CSDN-markdown编辑器
- wifi的使用
- 1029. 旧键盘(20)
- bzoj 2763 飞行路线(分层图最短路)
- (转)拿到软银44亿美金巨资后,WeWork要这样布局中国市场
- Linux内核学习路径
- Android自定义捕捉机制
- 深入理解Spring系列之十:DispatcherServlet请求分发源码分析
- 作业:订餐系统
- start