返回顶部
首页 > 资讯 > 移动开发 >Android WiFi P2P数据传输
  • 475
分享到

Android WiFi P2P数据传输

androidp2p网络协议wifi 2023-09-12 16:09:55 475人浏览 独家记忆
摘要

WiFi P2P是指通过WiFi直接连接两台设备之间的无线点对点通信,不需要通过路由器或者互联网。这种技术被广泛应用于移动设备之间的文件共享、游戏联机、音乐播放等应用场景中。 WiFi P2P的优点在

WiFi P2P是指通过WiFi直接连接两台设备之间的无线点对点通信,不需要通过路由器或者互联网。这种技术被广泛应用于移动设备之间的文件共享、游戏联机、音乐播放等应用场景中。

WiFi P2P的优点在于可以在没有网络的情况下建立设备之间的连接,同时具有高速和低延迟的特点。它还支持多种语言编程接口,并且使用起来非常简单。

Android中,WiFi P2P可以通过WifiP2pManager类进行实现,它提供了许多方法来扫描可用设备、建立P2P连接并传输数据等功能。开发者可以通过这些方法来实现设备之间的文件传输等操作。

WiFi和蓝牙是两种不同类型的无线通信技术,在许多方面都有不同的特点和用途。
以下是一些常见的WiFi和蓝牙的比较:

  1. 传输速率:WiFi传输速度更快,可以达到几百兆比特每秒,而蓝牙通常只能达到几兆比特每秒。
  2. 距离限制:WiFi的覆盖范围通常更大,可以在较长的距离内进行通信,而蓝牙的覆盖范围通常比较小,仅能在短距离内通信。
  3. 电池寿命:由于WiFi的功率更大,因此它通常消耗更多的电池生命,而蓝牙通常需要更少的功率,因此它通常耗电更少。

下面是使用Wifi P2P传输文件的基本代码示例,您可以根据需要进行调整:

1. 添加权限和依赖项

在AndroidManifest.xml中添加以下权限:

在build.gradle文件中添加以下依赖项:

implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.android.support:design:28.0.0'implementation 'com.android.support:recyclerview-v7:28.0.0'implementation 'com.android.support:cardview-v7:28.0.0'

2. 设置布局文件

在布局文件中添加以下代码:

        

3. 创建WifiP2pManager和WifiP2pManager.Channel对象

在Activity中定义以下变量:

private WifiP2pManager mManager;private WifiP2pManager.Channel mChannel;private BroadcastReceiver mReceiver;private IntentFilter mIntentFilter;private List peers = new ArrayList<>();private WifiP2pDeviceListAdapter mAdapter;

在Activity的onCreate()方法中,创建WifiP2pManager和WifiP2pManager.Channel对象:

mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);mChannel = mManager.initialize(this, getMainLooper(), null);

4. 注册广播接收器

在Activity中创建以下BroadcastReceiver对象:

mReceiver = new WifiDirectBroadcastReceiver(mManager, mChannel, this);

WifiDirectBroadcastReceiver是一个自定义广播接收器类,它负责处理与Wifi P2P相关的广播事件。

在Activity的onResume()方法中,注册广播接收器:

reGISterReceiver(mReceiver, mIntentFilter);

在Activity的onPause()方法中,注销广播接收器:

unregisterReceiver(mReceiver);

5. 开始搜索可用设备

通过调用startDiscovery()方法开始搜索可用设备:

mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {    @Override    public void onSuccess() {        //搜索成功    }    @Override    public void onFailure(int reasonCode) {        //搜索失败    }});

6. 显示可用设备列表

创建一个自定义适配器类WifiP2pDeviceListAdapter,用于显示可用设备列表中的每个设备:

public class WifiP2pDeviceListAdapter extends ArrayAdapter {    private List items;    private Context ctx;    public WifiP2pDeviceListAdapter(Context context, int textViewResourceId,         List objects) {        super(context, textViewResourceId, objects);        items = objects;        ctx = context;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        View v = convertView;        if (v == null) {            LayoutInflater vi = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);            v = vi.inflate(R.layout.row_devices, null);        }        WifiP2pDevice device = items.get(position);        if (device != null) {            TextView top = (TextView) v.findViewById(R.id.device_name);            TextView bottom = (TextView) v.findViewById(R.id.device_details);            if (top != null) {                top.setText(device.deviceName);            }            if (bottom != null) {                bottom.setText(getDeviceStatus(device.status));            }        }        return v;    }    private String getDeviceStatus(int deviceStatus) {        switch (deviceStatus) {            case WifiP2pDevice.AVAILABLE:                return "可用";            case WifiP2pDevice.INVITED:                return "已邀请";            case WifiP2pDevice.CONNECTED:                return "已连接";            case WifiP2pDevice.FAILED:                return "失败";            case WifiP2pDevice.UNAVAILABLE:                return "不可用";            default:                return "未知状态";        }    }}

在Activity中,设置ListView的适配器:

mAdapter = new WifiP2pDeviceListAdapter(this, R.layout.row_devices, peers);ListView listView = (ListView) findViewById(R.id.list_devices);listView.setAdapter(mAdapter);

在BroadcaseReceiver接收到搜索结果后,在Activity中更新设备列表:

@Overridepublic void onPeersAvailable(WifiP2pDeviceList peerList) {    peers.clear();    peers.addAll(peerList.getDeviceList());    mAdapter.notifyDataSetChanged();    if (peers.size() == 0) {        //没有可用设备    }}

7. 连接到另一个设备

在设备列表中选择一个设备,并调用connect()方法:

mManager.connect(mChannel, config, new WifiP2pManager.ActionListener() {    @Override    public void onSuccess() {        //连接成功    }    @Override    public void onFailure(int reason) {        //连接失败    }});

8. 传输文件

在连接成功后,使用WifiP2pGroup.getClientList()方法获取已连接设备的列表,将文件传输到列表中的第一个设备:

WifiP2pGroup group = (WifiP2pGroup) intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP);if (group != null) {    Collection clients = group.getClientList();    if (clients.size() > 0) {        WifiP2pClient client = (WifiP2pClient) clients.toArray()[0];        File file = new File(filePath);        if (file.exists()) {            try {                FileInputStream inputStream = new FileInputStream(file);                OutputStream outputStream = client.getOutputStream();                byte[] buffer = new byte[1024];                int length;                while ((length = inputStream.read(buffer)) > 0) {                    outputStream.write(buffer, 0, length);                }                outputStream.close();                inputStream.close();            } catch (IOException e) {                e.printStackTrace();            }        } else {            //文件不存在        }    } else {        //没有连接设备    }} else {    //组不存在}

注意:以上代码仅用于演示如何使用Wifi P2P传输文件,您需要根据自己的情况进行修改。此外,Wifi P2P传输文件的性能可能会受到网络环境的影响,并不适用于大文件传输。

来源地址:https://blog.csdn.net/weixin_44008788/article/details/131294945

--结束END--

本文标题: Android WiFi P2P数据传输

本文链接: https://www.lsjlt.com/news/404758.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android WiFi P2P数据传输
    WiFi P2P是指通过WiFi直接连接两台设备之间的无线点对点通信,不需要通过路由器或者互联网。这种技术被广泛应用于移动设备之间的文件共享、游戏联机、音乐播放等应用场景中。 WiFi P2P的优点在...
    99+
    2023-09-12
    android p2p 网络协议 wifi
  • Android 数据SM4传输加解密
    第一:场景介绍   甲方要求,数据在传输过程中要加密。 第二:选择加解密方式: 这里面Android 和服务端都是选择SM4 第三:实现方式 服务端采用SpringBoot,在pom.xml 文件下添加依赖 org.bouncycastle...
    99+
    2023-09-07
    java 开发语言
  • 【Android】Bluetooth(蓝牙)连接与数据传输(一)
    目录 简介权限声明蓝牙扫描开始扫描取消扫描 获取蓝牙信息蓝牙配对配对取消配对 获取已配对蓝牙最终效果 简介 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备...
    99+
    2023-08-30
    android Bluetooth java kotlin android studio
  • 如何使用IOS实现WIFI传输
    问题 业务场景上存在需要将手机里的文件、图片传递给其他的设备, 不仅仅局限于传书、资料啥的都有可能传递 方案 最base的方法:设备之间加个云,设备上传资料到云,云同步资料到各个设备...
    99+
    2022-05-26
    IOS WIFI 局域网
  • 怎么使用IOS实现WIFI传输
    这篇文章主要介绍了怎么使用IOS实现WIFI传输,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。问题业务场景上存在需要将手机里的文件、图片传递给其他的设备,不仅仅局限于传书、资...
    99+
    2023-06-14
  • android蓝牙传输数据功能怎么实现
    在Android中,可以使用BluetoothAdapter类来实现蓝牙传输数据的功能。以下是实现蓝牙传输数据的基本步骤:1. 检查...
    99+
    2023-10-08
    android
  • android蓝牙数据传输功能怎么实现
    在Android中实现蓝牙数据传输功能,可以分为以下几个步骤: 获取蓝牙适配器:通过调用BluetoothAdapter.get...
    99+
    2023-10-24
    android
  • Android intent数据传递,数据回传
    1.intent数据传递,第一个页面数据传到第二个页面 在两个页面中进行数据传递 下面都以intent显式页面跳转为例,,隐式跳转和显示跳转...
    99+
    2022-06-06
    intent Android
  • Android使用socket进行二进制流数据传输
    目录引言简单的自定义协议完整的代码结语引言 使用socket流传输二进制流数据,比如文件或者视频图片等等信息的时候,我们通常使用tcp协议传输,因为tcp协议可以保证二进制流按序到达...
    99+
    2023-05-15
    Android二进制流数据传输 Android二进制传输
  • android数据传递
    将MainActivity页面的数据:姓名、年龄、性别,传递给新的Activity页面显示出来 MainActivity.java页面 pack...
    99+
    2022-06-06
    Android
  • PHP函数的数据传输函数
    随着互联网技术的不断发展,网站的功能需求也越来越多,而PHP作为一种广泛应用于Web开发的脚本语言,其函数的使用也就变得越来越重要。本文主要介绍PHP函数中的数据传输函数,包括GET、POST、COOKIE等常用的数据传输方式的使用方法和注...
    99+
    2023-05-19
    函数参数 数据传输 PHP函数
  • 云服务器数据传输
    云服务器数据传输是指通过互联网将服务器上的数据传输到云服务器上的过程。在进行云服务器数据传输时,您需要准备好网络连接和相应的软件工具和技术支持,以及遵守云服务提供商的使用政策和协议。下面是一些可能需要考虑的事项: 准备网络连接:确保您已...
    99+
    2023-10-26
    数据传输 服务器
  • Xamarin Essentials教程数据处理传输数据
    Xamarin Essentials教程数据处理传输数据在移动应用程序中,除了常规的数据处理,还涉及数据存储、数据传输、版本数据多个方面。Xamarin.Essentials组件提供了多个数据处理相关的类,帮助开发者完成移动应用的特殊应用。...
    99+
    2023-06-05
  • Android怎么使用socket进行二进制流数据传输
    本篇内容主要讲解“Android怎么使用socket进行二进制流数据传输”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么使用socket进行二进制流数据传输”吧!简单的自定义协议...
    99+
    2023-07-06
  • 数据传输 | dtle 使用初探
    作者:马莹乐 爱可生研发团队成员,负责 mysql 中间件和数据库管理平台的测试。擅长找茬(测试技术爱好者),欢迎大家试用 dtle~ 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 ...
    99+
    2019-08-17
    数据传输 | dtle 使用初探
  • Node.js 数据加密传输浅析
    前言 数据加密传输,大家经常接触几个方式一个是密文传输,一个明文传输密文传输,就是用密钥对数据加密,使用公钥对数据解密,传输的通道可以是https的也可以是http的。明文传输,前提是建立一个安全的传输通道...
    99+
    2022-06-04
    数据 Node js
  • Python数据传输黏包问题
    目录1.socket黏包问题原理2.UDP协议3.TCP协议4.发送方出现的黏包5. 接收方出现的黏包6.黏包的成因1.socket黏包问题原理 黏包:指数据与数据之间没有明确的分界...
    99+
    2024-04-02
  • vue数据传输如何加密
    在vue中使用jsencrypt.js对数据进行加密传输首先,在vue项目中使用yarn安装jsencrypt.js;yarn add jsencrypt --depjsencrypt.js安装好后,在vue项目中引入jsencrypt.j...
    99+
    2024-04-02
  • kettle传输数据如何加密
    java使用ASE128对kettle加密传输数据,具体方法如下:package com;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import ...
    99+
    2024-04-02
  • FTP传输数据怎么加密
    利用vsftp对FTP传输数据进行加密的方法首先,在计算机中创建一个FTP用户;user -d /ftp_www -s /sbin/nologin mvpbangecho "123123" | passwd mvpbang --stdinc...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作