当前位置: 首页 > news >正文

网站如何做301跳转物流网站建设与管理规划书

网站如何做301跳转,物流网站建设与管理规划书,外贸模板网站,苏州建设工程检测协会网站android wifi直连 wifip2pmanager#xff1b;使用WiFi 直连#xff0c;然后通过udp进行通讯。 Android WiFi 直连#xff08;Wi-Fi Direct#xff0c;也称为Wi-Fi P2P#xff09;是一种让两台或多台设备通过Wi-Fi技术直接进行点对点连接的技术#xff0c;无需借助传统的无…android wifi直连 wifip2pmanager使用WiFi 直连然后通过udp进行通讯。 Android WiFi 直连Wi-Fi Direct也称为Wi-Fi P2P是一种让两台或多台设备通过Wi-Fi技术直接进行点对点连接的技术无需借助传统的无线路由器或接入点。这种技术使得设备间可以快速建立安全的无线连接实现文件传输、屏幕共享、游戏对战等多种应用尤其适用于智能手机、平板电脑、打印机、相机等消费电子设备间的近距离通信。 以下是Android WiFi 直连的基本工作原理和使用步骤 工作原理 设备发现启用Wi-Fi Direct功能的设备可以通过广播信号搜索和发现附近的其他支持Wi-Fi Direct的设备。设备间可以互相检测到对方的存在并显示在设备列表中供用户选择。 连接请求用户在设备列表中选择要连接的目标设备后发起连接请求。目标设备收到请求后通常需要手动或自动确认接受连接。 组建立一旦连接请求被接受两台设备之间会自动建立一个Wi-Fi Direct组。在这个组中一台设备会被选为“组主人”Group OwnerGO相当于小型网络的接入点负责管理组内的连接和数据传输。另一台设备则作为“客户端”Client加入该组。 数据传输连接建立后组主人和客户端设备可以使用各自的IP地址和端口号进行直接的TCP/UDP通信。应用程序可以利用这些网络参数创建Socket连接进行文件传输、消息传递等操作。 例子代码 public class WifiConnectActivity extends AppCompatActivity {private Button btnConnect;private WifiDirectLink wifiDirectLink;Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);LinearLayout linearLayout new LinearLayout(this);linearLayout.setOrientation(LinearLayout.VERTICAL);setContentView(linearLayout);btnConnect new AppCompatButton(this);btnConnect.setText(链接);AppCompatButton btnConnect2 new AppCompatButton(this);btnConnect2.setText(发送);linearLayout.addView(btnConnect);linearLayout.addView(btnConnect2);wifiDirectLink new WifiDirectLink(getApplicationContext());// 按钮点击事件 - 连接到对等设备btnConnect.setOnClickListener(v - wifiDirectLink.connectToPeer());btnConnect2.setOnClickListener(v - wifiDirectLink.send(hello.getBytes()));if (Build.VERSION.SDK_INT Build.VERSION_CODES.TIRAMISU) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.NEARBY_WIFI_DEVICES}, 119);} else {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 119);}}Overrideprotected void onDestroy() {wifiDirectLink.release();super.onDestroy();}}连接工具类 import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.p2p.WifiP2pConfig; import android.net.wifi.p2p.WifiP2pDevice; import android.net.wifi.p2p.WifiP2pDeviceList; import android.net.wifi.p2p.WifiP2pInfo; import android.net.wifi.p2p.WifiP2pManager; import android.os.Build; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; import android.util.Log; import android.widget.Toast;import androidx.core.content.ContextCompat;import java.net.InetAddress; import java.util.ArrayList; import java.util.List;public class WifiDirectLink {private static final String TAG WifiDirectLink;private final WifiP2pManager wifiP2pManager;private final WifiP2pManager.Channel channel;private Context context;private final Handler handler new Handler(Looper.getMainLooper());private SyncUDP udp;private String otherClientIp;public WifiDirectLink(Context context) {this.context context;Log.i(TAG, WifiDirectLink: begin start-----------------------------------------------);if (udp null) {udp new SyncUDP(Config.BROADCAST_PORT 3);udp.setListener(this::receiveAction);}// 初始化Wi-Fi P2P管理器和通道wifiP2pManager (WifiP2pManager) context.getSystemService(Context.WIFI_P2P_SERVICE);channel wifiP2pManager.initialize(context, Looper.getMainLooper(), null);// 创建意图过滤器并添加所需的意图动作IntentFilter intentFilter new IntentFilter();intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);// 注册广播接收器ContextCompat.registerReceiver(context, broadcastReceiver, intentFilter, ContextCompat.RECEIVER_EXPORTED);handler.postDelayed(new Runnable() {Overridepublic void run() {try {discoverPeers();} catch (Exception e) {e.printStackTrace();}handler.postDelayed(this, 8888);}}, 88);}private final BroadcastReceiver broadcastReceiver new BroadcastReceiver() {Overridepublic void onReceive(Context context, Intent intent) {Log.i(TAG, onReceive: intent.getAction());String action intent.getAction();if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {// 获取连接信息WifiP2pInfo wifiP2pInfo intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO);if (wifiP2pInfo ! null) {new Thread(() - {// 获取groupOwnerAddressInetAddress groupOwnerAddress wifiP2pInfo.groupOwnerAddress;// 在这里可以使用groupOwnerAddress进行相应的操作if (groupOwnerAddress ! null) {String hostAddress groupOwnerAddress.getHostAddress();String hostName groupOwnerAddress.getHostName();byte[] address groupOwnerAddress.getAddress();String canonicalHostName groupOwnerAddress.getCanonicalHostName();Log.i(TAG, onReceive: get host address: hostAddress ; hostName ; address ; canonicalHostName);// start socket connectotherClientIp hostAddress;if (!TextUtils.isEmpty(otherClientIp)) {new Handler(Looper.getMainLooper()).post(() - Toast.makeText(context.getApplicationContext(), 获取鬣主任ip, Toast.LENGTH_LONG).show());}}}).start();}}}};public void send(byte[] buf) {// 广播 都接受得到Log.i(TAG, send: other client ip: otherClientIp);if (udp null || otherClientIp null) return;new Thread(() - {String substring otherClientIp.substring(0, otherClientIp.lastIndexOf(.));substring substring .255;udp.sendAction(buf, substring);}).start();}SuppressLint(MissingPermission)public void discoverPeers() throws Exception {wifiP2pManager.discoverPeers(channel, new WifiP2pManager.ActionListener() {Overridepublic void onSuccess() {Log.i(TAG, onSuccess: scan wifi node);}Overridepublic void onFailure(int i) {Log.i(TAG, onFailure: No nodes scanned);}});}SuppressLint(MissingPermission)public void connectToPeer() {Log.i(TAG, connectToPeer: start connect);wifiP2pManager.requestPeers(channel, wifiP2pDeviceList - {ListWifiP2pDevice deviceList new ArrayList(wifiP2pDeviceList.getDeviceList());Log.i(TAG, connectToPeer: item count: deviceList.size());if (deviceList.size() 0) {return;}for (WifiP2pDevice item : deviceList) {Log.i(TAG, connectToPeer: item name: item.deviceName ; item.deviceAddress);// 创建连接配置WifiP2pConfig config new WifiP2pConfig();config.deviceAddress item.deviceAddress;connectItem(config, item);}});}SuppressLint(MissingPermission)private void connectItem(WifiP2pConfig config, WifiP2pDevice item) {try {wifiP2pManager.connect(channel, config, new WifiP2pManager.ActionListener() {Overridepublic void onSuccess() {Log.i(TAG, onSuccess: Link successful for: item.deviceName ; item.deviceAddress);}Overridepublic void onFailure(int reasonCode) {Log.i(TAG, onFailure: Link failure for: item.deviceName ; item.deviceAddress);}});} catch (Exception e) {e.printStackTrace();Log.i(TAG, getDevices: connect item error: e.getMessage());}}private void receiveAction(byte[] buffer, int len, String ip) {Log.i(TAG, receiveAction: ip: ip ; len: len);}public void release() {handler.removeCallbacksAndMessages(null);if (udp ! null) {udp.release();udp null;}try {context.unregisterReceiver(broadcastReceiver);} catch (Exception e) {e.printStackTrace();Log.i(TAG, release: error: e.getMessage());}try {if (Build.VERSION.SDK_INT Build.VERSION_CODES.O_MR1) channel.close();} catch (Exception e) {e.printStackTrace();Log.i(TAG, release:close channel error: e.getMessage());}} } udp 通讯类 import android.util.Log;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;public class SyncUDP implements Runnable {private static final String TAG ReceiveUDP;private Thread thread;private DatagramSocket socket;private OnUpdateListener listener;private int port;public void setListener(OnUpdateListener listener) {this.listener listener;}public void release() {if (thread ! null !thread.isInterrupted())thread.interrupt();listener null;closeSocket();if (thread ! null) {try {thread.join();} catch (Exception e) {e.printStackTrace();}thread null;}}public SyncUDP(int port) {this.port port;thread new Thread(this);thread.start();}public void sendAction(byte[] buf, String ip) {if (socket null || socket.isClosed()) return;try {DatagramPacket sendPacket new DatagramPacket(buf, buf.length);sendPacket.setAddress(InetAddress.getByName(ip));sendPacket.setPort(port);socket.send(sendPacket);} catch (Exception e) {e.printStackTrace();Log.i(TAG, sendAction: send package error: e.getMessage());}}Overridepublic void run() {while (!Thread.interrupted()) {try {byte[] by new byte[16];socket new DatagramSocket(port);socket.setBroadcast(true);while (!Thread.interrupted()) {try {// receive dataDatagramPacket receivePacket new DatagramPacket(by, by.length);Log.i(TAG, run: start wait package);// Join threadsocket.receive(receivePacket);String ip receivePacket.getAddress().getHostAddress();Log.i(TAG, run: get package len: receivePacket.getLength() ; ip: ip);if (listener ! null)listener.onUpdateUI(receivePacket.getData(), receivePacket.getLength(), ip);} catch (Exception e) {e.printStackTrace();break;}}closeSocket();} catch (Exception e) {e.printStackTrace();}}closeSocket();}private void closeSocket() {if (socket ! null) {if (!socket.isClosed()) {try {socket.close();} catch (Exception e) {e.printStackTrace();}}socket null;}}public interface OnUpdateListener {void onUpdateUI(byte[] buffer, int len, String ip);} }
http://www.hkea.cn/news/14296497/

相关文章:

  • 自己做网站制作需要多少钱创建平台网站下载
  • 免费软件下载网站排行网站微信支付开发
  • 南通网站定制搭建泊头市做网站
  • 深圳做网站980做我女朋友的网站
  • 网站建设专业平台网站上线需要哪些步骤
  • 公司注册网站官网工厂招工信息
  • 宁波网站建设制作公司哪家好网站改版 网站存在问题
  • 怎样做网站关键字百石网怎么做网站
  • 揭阳企业自助建站系统秦皇岛市融资综合信用服务平台
  • ppt做书模板下载网站怎么看出网站是dede做的
  • 交易网站建设需要学什么it培训机构怎么样
  • 网站界面结构平面设计公司简介怎么写
  • 工会网站平台建设订票网站模板
  • 高端网站开发注意事项哪个网站域名便宜
  • 惠州微网站建设企业微信收费标准一年多少钱
  • 网站美工建设软件石家庄网站模板建站
  • 做网站难吗_挣钱吗邯郸网络营销推广软件
  • 建网站需要软件wordpress导航怎么改
  • 百度账号购买网站做软装的网站
  • 一个外国人建设的中国文字网站大邑网站建设
  • 做的好的淘宝客网站企业营销型网站推广
  • 设计个网站多少钱南宁本地网站设计
  • 如何做网站站内搜索手机wap网站下载
  • 贵州建设厅网站备案人员查询开封建网站
  • 最好的手表网站WordPress全球用户量2019
  • ssl外贸网站上海市有几个区
  • 微网站开发平台wizi电商网站前端架构设计
  • 昆山规划与建设局网站国企建筑公司有哪些
  • 网站建设 销售提成网站建设如何商谈
  • 宁波学校网站建设写作网站哪个比较赚钱