java之WIFI信号模块

开发步骤分为以下几点:

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);
    }
}

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

相关推荐
深盾科技30 分钟前
Kotlin Data Classes 快速上手
android·开发语言·kotlin
zzywxc7871 小时前
详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
开发语言·javascript·人工智能·深度学习·金融·prompt·流程图
浮灯Foden1 小时前
算法-每日一题(DAY13)两数之和
开发语言·数据结构·c++·算法·leetcode·面试·散列表
淡海水1 小时前
【原理】Struct 和 Class 辨析
开发语言·c++·c#·struct·class
Q_Q19632884751 小时前
python的电影院座位管理可视化数据分析系统
开发语言·spring boot·python·django·flask·node.js·php
该用户已不存在1 小时前
OpenJDK、Temurin、GraalVM...到底该装哪个?
java·后端
杜子不疼.2 小时前
《Python学习之第三方库:开启无限可能》
开发语言·python·学习
TT哇2 小时前
@[TOC](计算机是如何⼯作的) JavaEE==网站开发
java·redis·java-ee
Tina学编程2 小时前
48Days-Day19 | ISBN号,kotori和迷宫,矩阵最长递增路径
java·算法
青川入梦2 小时前
MyBatis极速通关上篇:Spring Boot环境搭建+用户管理实战
java·开发语言·mybatis