首页 > 编程语言 >java之WIFI信号模块

java之WIFI信号模块

时间:2024-08-02 14:29:52浏览次数:10  
标签:ViewHolder java iterator WIFI NsdServiceInfo devices 模块 device public

开发步骤分为以下几点:

1.在 AndroidManifest 中声明相关权限(网络和文件读写权限)

声明权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

这里我写了四个文件供大家参考,首先是主菜单:

只是包含了发送和接收,这个界面的代码实现很简单,只需要,在xml文件里面放俩个button按钮,然后,绑定另外的发送端和接收端就可以了:

public class MainActivity extends AppCompatActivity {

    private Button startBtton, stopButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //super的意思是继承父类
       super.onCreate(savedInstanceState);
       //初始化xml组件
       setContentView(R.layout.activity_main);
       //初始化按钮组件
       startBtton=findViewById(R.id.bth_start);
       stopButton=findViewById(R.id.bth_stop);

       //当按钮按下去时候的监听器然后进行跳转到发送端界面
        startBtton.setOnClickListener(v->startActivity(new Intent(MainActivity.this ,ServerActivity.class)));
      //当按钮按下去时候的监听器然后进行跳转到接收端界面
        stopButton.setOnClickListener(view ->startActivity(new Intent(MainActivity.this,ClientActivity.class)) );
    }
}

其实比较难的就是用到socket编程,然后还用到多线程:

这里给大家截取部分供大家参考一下

接下里是客户端功能:

然后还用服务器功能:

public class NSDDeviceAdapter extends RecyclerView.Adapter<NSDDeviceAdapter.ViewHolder> {
    //定义了一个私有变量device,用来存储NsdServiceInfo的对象
    private List<NsdServiceInfo> devices = new ArrayList<>();

    //这里面接收了NsdServiceInfo的参数device
    public  void addDevice(NsdServiceInfo device){
        //将传入的设备信息添加到devices集合中。这个集合可能是一个列表,用于存储所有设备信息。
        devices.add(device);
        // 调用这个方法来通知列表视图(比如RecyclerView)在指定位置插入了一个新的项目。
        // devices.size()-1是新添加的项目在列表中的索引位置
        notifyItemInserted(devices.size()-1);
    }
    public void removeDevice(NsdServiceInfo device){

        Iterator<NsdServiceInfo> iterator = devices.iterator();

        boolean hasRemoved = false;

        while (iterator.hasNext()){
            //这行代码从迭代器获取下一个元素
            NsdServiceInfo tmp = iterator.next();
            //这是一个条件判断,如果当前遍历的元素与返回值相等,就执行大括号内的代码
            if(tmp.getServiceName().equals(device.getServiceName())){
                //如果天剑满足,这行代码会从集合中删除当前遍历到的元素
                iterator.remove();
                //表示有元素被删除
                hasRemoved = true;
            }
        }
        //如果在遍历过程中有元素被删除,这行代码会调用notifyDataSetChanged方法
        if(hasRemoved) {
            notifyDataSetChanged();
        }
    }




    @NonNull
    @Override
    public NSDDeviceAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new ViewHolder(new TextView(viewGroup.getContext()));
    }

    @Override
    public void onBindViewHolder(@NonNull NSDDeviceAdapter.ViewHolder viewHolder, int i) {
        NsdServiceInfo serviceInfo = devices.get(i);
        viewHolder.textView.setText(serviceInfo.toString());
    }

    @Override
    public int getItemCount() {
        return devices.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder{
        protected TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = (TextView) itemView;
        }
    }
    public interface ItemClick{
        void onClick(NsdServiceInfo nsdServiceInfo);
    }
}

每一行什么作用,我都做了注释,希望能帮到大家!

标签:ViewHolder,java,iterator,WIFI,NsdServiceInfo,devices,模块,device,public
From: https://blog.csdn.net/Lele0456789/article/details/140871087

相关文章

  • 在cmd/powershell中使用java/javac -cp/--class-path命令链接多个jar包
    ​ 之前使用ide,习惯了傻瓜式一键运行java文件,对于java虚拟机以及java指令了解的很少,最近重温java,在使用windows中的cmd来运行java项目时,遇到了一点问题,相同的指令在cmd中能够运行,在powershell中不能正确运行,在国内网站上搜索无果后,果断去国外,在stackoverflow上找到解决办法。​ ......
  • Java计算机毕业设计网络相册平台(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和智能设备的普及,人们拍摄和分享照片的方式发生了翻天覆地的变化。传统的实体相册逐渐被数字相册所取代,而网络相册平台作为......
  • Java计算机毕业设计基于Android的自闭症康复训练APP设计与实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景自闭症,作为一种复杂的神经发育障碍,影响着全球数百万儿童及其家庭。自闭症患者在社交互动、沟通表达及行为模式上常表现出显著困难。随着移动技术的飞......
  • Java计算机毕业设计企业固定资产管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着企业规模的扩大与业务的复杂化,固定资产作为企业运营的重要物质基础,其数量与价值日益增长,管理难度也随之加大。传统的手工或简单电子表格管理方式......
  • java-若依/RuoYi下载,导入,安装,运行,运行工具Eclipse IDE
    介绍RuoYi基于SpringBoot、Shiro、Mybatis的权限后台管理系统RuoYi是一个后台管理系统,基于经典技术组合(SpringBoot、ApacheShiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。文档地址:介绍|RuoYi下......
  • Java入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享
    场景作为一名Java开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承Java体系需持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗......
  • 基于Java的数据结构课程网站的设计与实现/线上学习系统/在线教学管理系统/Web、SSM、v
    需要源码的联系方式请查看文章末尾数据结构课程网站的设计与实现摘 要计算机网络与信息化管理相配合,可以有效地提高管理人员的工作效能和改进工作的质量。良好的数据结构课程网站可以使管理员工作得到更好的实施和应用,并有助于管理员更好地管理数据结构课程,解决人力管理......
  • 基于JAVA的网络在线考试系统的设计与实现/在线教学管理系统/计算机专业
    需要源码的联系方式请查看文末摘 要计算机网络与信息化管理相配合,可以有效地提高人员的工作效能和改进工作的质量。良好的在线考试系统可以使考试得到更好的进行和管理,并有助于管理员更好地管理学生成绩,解决人力管理中出现的差错等问题。因此一套好的在线考试系统可以起到......
  • 基于Java+SpringBoot+Mysql+Vue实现的4S店保养与维修系统部分功能设计与实现八
    一、前言介绍:1.1项目摘要随着社会经济的不断发展,人们对汽车养护和维修的重视程度日益提高。然而,传统的汽车保养与维修服务存在诸多问题,如信息不对称、服务质量参差不齐等。这些问题不仅影响了消费者的服务体验,也制约了汽车后市场的健康发展。因此,为了解决这些问题,提升汽......
  • 基于Java+SpringBoot+Mysql+Vue实现的4S店保养与维修系统部分功能设计与实现九
    一、前言介绍:1.1项目摘要随着社会经济的不断发展,人们对汽车养护和维修的重视程度日益提高。然而,传统的汽车保养与维修服务存在诸多问题,如信息不对称、服务质量参差不齐等。这些问题不仅影响了消费者的服务体验,也制约了汽车后市场的健康发展。因此,为了解决这些问题,提升汽......