我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android WiFi P2P数据传输

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android 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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android WiFi P2P数据传输

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Android】Bluetooth(蓝牙)连接与数据传输(一)

目录 简介权限声明蓝牙扫描开始扫描取消扫描 获取蓝牙信息蓝牙配对配对取消配对 获取已配对蓝牙最终效果 简介 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备
2023-08-30

android蓝牙传输数据功能怎么实现

在Android中,可以使用BluetoothAdapter类来实现蓝牙传输数据的功能。以下是实现蓝牙传输数据的基本步骤:1. 检查设备是否支持蓝牙功能:```javaBluetoothAdapter bluetoothAdapter =
2023-10-08

android蓝牙数据传输功能怎么实现

在Android中实现蓝牙数据传输功能,可以分为以下几个步骤:获取蓝牙适配器:通过调用BluetoothAdapter.getDefaultAdapter()方法来获取蓝牙适配器对象。打开蓝牙:如果蓝牙未开启,可以调用BluetoothAd
2023-10-24

Android intent数据传递,数据回传

1.intent数据传递,第一个页面数据传到第二个页面在两个页面中进行数据传递 下面都以intent显式页面跳转为例,,隐式跳转和显示跳转看下面链接 https://blog.csdn.net/qq_45844648/article/det
2022-06-06

Android使用socket进行二进制流数据传输

这篇文章主要介绍了Android使用socket进行二进制流数据传输,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-05-15

android数据传递

将MainActivity页面的数据:姓名、年龄、性别,传递给新的Activity页面显示出来 MainActivity.java页面 package com.example.dell.activity; import android.co
2022-06-06

云服务器数据传输

云服务器数据传输是指通过互联网将服务器上的数据传输到云服务器上的过程。在进行云服务器数据传输时,您需要准备好网络连接和相应的软件工具和技术支持,以及遵守云服务提供商的使用政策和协议。下面是一些可能需要考虑的事项:准备网络连接:确保您已经连接到了与您的云服务器通信的网络。您的云服务器可能不支持连接互联网,因此您需要确保您已经连接到了合适的网络,并且可以正常使用互联网。您可以使用公共云或私有云平
2023-10-26

Android怎么使用socket进行二进制流数据传输

本篇内容主要讲解“Android怎么使用socket进行二进制流数据传输”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么使用socket进行二进制流数据传输”吧!简单的自定义协议
2023-07-06

Xamarin Essentials教程数据处理传输数据

Xamarin Essentials教程数据处理传输数据在移动应用程序中,除了常规的数据处理,还涉及数据存储、数据传输、版本数据多个方面。Xamarin.Essentials组件提供了多个数据处理相关的类,帮助开发者完成移动应用的特殊应用。
2023-06-05

vue数据传输怎么加密

今天小编给大家分享一下vue数据传输怎么加密的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.首先,在vue项目中使用yar
2023-07-04

将数据从VisualBasic传输到Excel

要将数据从Visual Basic传输到Excel,可以使用Excel对象模型和Visual Basic for Applications(VBA)来完成。以下是一种常见的方法:1. 在Visual Basic中,首先创建一个Excel应用
2023-09-08

Node.js 数据加密传输浅析

前言 数据加密传输,大家经常接触几个方式一个是密文传输,一个明文传输密文传输,就是用密钥对数据加密,使用公钥对数据解密,传输的通道可以是https的也可以是http的。明文传输,前提是建立一个安全的传输通道,这里使用证书对通道的安全做了防护
2022-06-04

数据传输方式有哪些

这篇文章主要介绍数据传输方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据传输方式是数据在信道上传送所采取的方式。按照数据传输的顺序可以分为“并行传输”和“串行传输”两种方式;按照数据传输的同步方式可分为“
2023-06-06

数据传输 | dtle 使用初探

作者:马莹乐爱可生研发团队成员,负责 mysql 中间件和数据库管理平台的测试。擅长找茬(测试技术爱好者),欢迎大家试用 dtle~本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。dtle 是一款爱可生 MySQ
数据传输 | dtle 使用初探
2019-08-17

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录