请选择 进入手机版 | 继续访问电脑版

12360技术网 - 专业IT技术发表平台

 立即注册  找回密码
查看: 5268|回复: 5

Android多个Activity共享socket,实现一个页面连接WIFI,其他页面也能传输

[复制链接]

21

主题

32

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
发表于 2020-1-26 13:50:14 | 显示全部楼层 |阅读模式
Android多个页面共享socket的方法有三种:
1.单例模式
2.Application实体类
3.socket封装在service中
这里只用了第二种方法,即封装一个Application实体类。具体实现如下:
  1. package com.example.wisdomclassroom;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;import android.app.Application;import android.os.Looper;import android.util.Log;import android.widget.Toast;public class WiFiApplication extends Application {    private static Socket socket;    private static OutputStream out = null;    private static InputStream in = null;    private  static String IP = "192.168.4.1";    private  static int PORT = 8080;    private static boolean Connect_flag;    private static String msg_send;    public void init() throws IOException, Exception{        new Thread(new Runnable() {            @Override            public void run() {                try {                    if(socket==null) {                        socket = new Socket(IP, PORT);                        out = new DataOutputStream(socket.getOutputStream());                        in = new DataInputStream(socket.getInputStream());                        Connect_flag = true;                        Log.d("slllllll", "789789789789");                    }                    else if(socket!=null){                        socket.close();                        socket = null;                        Connect_flag = false;                        Log.d("slllllll", "7123123322626");                    }                } catch (UnknownHostException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }    public void SendData() throws IOException{        new Thread(new Runnable() {            @Override            public void run() {                if(socket != null){                    try{                        if (msg_send != null && msg_send.length()>0){                            out.write(msg_send.getBytes("utf-8"));                            out.flush();                            msg_send="";                        }                    }                    catch (IOException e){                        e.printStackTrace();                    }                }            }        }).start();    }    public Socket getSocket() { return socket; }    public void setSocket(Socket socket) { this.socket = socket; }    public OutputStream getOut() { return out; }    public void setOut(OutputStream out) { this.out = out; }    public InputStream getIn() { return in; }    public void setIn(InputStream in) { this.in = in; }    public  Boolean getflag(){        return Connect_flag;    }    public void setMsg_send(String msg_send){        this.msg_send = msg_send;    }    public  String getMsg_send(){        return msg_send;    }}
复制代码
将建立和断开连接、发送数据都封装在Application实体类中,当我们在不同Activity中要使用该连接时,只需要先获取该类的对象,然后调用相应的函数即可。
第一次建立连接
  1. final WiFiApplication WFApp = (WiFiApplication)CatalogActivity.this.getApplication();        link_btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if(socket==null) {                    try {                        WFApp.init();                        socket = WFApp.getSocket();                        outer = WFApp.getOut();                        inner = WFApp.getIn();               }catch (IOException e) {                    e.printStackTrace();                } catch (Exception e) {                        e.printStackTrace();                    }                }                if(socket!=null){                    try {                        WFApp.init();                    }catch (IOException e) {                        e.printStackTrace();                    } catch (Exception e) {                        e.printStackTrace();                    }                }                if(WFApp.getflag()==false) {                    link_btn.setBackgroundColor(Color.GREEN);                    link_btn.setText("断开连接");                    light_btn.setEnabled(true);                    fan_btn.setEnabled(true);                    music_btn.setEnabled(true);                }                else if(WFApp.getflag()==true){                    link_btn.setText("点击连接");                    link_btn.setBackgroundColor(Color.GRAY);                    Toast.makeText(CatalogActivity.this,"连接已断开",Toast.LENGTH_LONG).show();                    light_btn.setEnabled(false);                    fan_btn.setEnabled(false);                    music_btn.setEnabled(false);                }            }        });
复制代码
获取唯一实例
  1. final WiFiApplication WFApp = (WiFiApplication)MusicActivity.this.getApplication();        socket = WFApp.getSocket();        outer = WFApp.getOut();
复制代码
发送数据
  1.      M_playfirst_btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                try {                    msg_send = "music01\n";                    WFApp.setMsg_send(msg_send);                    WFApp.SendData();                    M_play_btn.setBackgroundColor(getResources().getColor(R.color.colorSkyBlue));                    M_suspend_btn.setBackground(getResources().getDrawable(R.drawable.border_btn));                } catch (Exception e) {                    e.printStackTrace();                }            }        });
复制代码
                                                                                                                                       
                                                    
  • 点赞                        
  • 收藏                        
  • 分享                                                                                                                        
  •                                                         
                                      
    • 文章举报                           
                                                
                                                                        
                                            
                                                        追猫的蝴蝶                                                                发布了3 篇原创文章 · 获赞 1 · 访问量 3350                                                                                            私信                                                            关注
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x




上一篇:《POJ3279 Fliptile》枚举+DFS(详解)
下一篇:Crazy Thairs POJ - 3378(10000进制加法 树状数组)
回复

使用道具 举报

0

主题

13

帖子

283

积分

中级会员

Rank: 3Rank: 3

积分
283
发表于 2020-2-3 00:14:16 | 显示全部楼层
楼主发贴辛苦了,谢谢楼主分享![www.12360.co]
回复

使用道具 举报

14

主题

24

帖子

262

积分

中级会员

Rank: 3Rank: 3

积分
262
发表于 2020-2-6 07:37:03 | 显示全部楼层
楼主,大恩不言谢了![www.12360.co]
回复

使用道具 举报

0

主题

20

帖子

430

积分

中级会员

Rank: 3Rank: 3

积分
430
发表于 2020-2-9 12:20:51 | 显示全部楼层
这东西我收了!谢谢楼主![www.12360.co]
回复

使用道具 举报

0

主题

17

帖子

367

积分

中级会员

Rank: 3Rank: 3

积分
367
发表于 2020-2-10 22:16:41 | 显示全部楼层
既然你诚信诚意的推荐了,那我就勉为其难的看看吧![www.12360.co]
回复

使用道具 举报

0

主题

17

帖子

367

积分

中级会员

Rank: 3Rank: 3

积分
367
发表于 2020-2-11 00:41:40 | 显示全部楼层
我看不错噢 谢谢楼主![www.12360.co]
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

12360技术网

GMT+8, 2020-2-29 14:56 , Processed in 0.089363 second(s), 25 queries .

本网站内容收集于互联网,Www.12360.Co不承担任何由于内容的合法性及健康性所引起的争议和法律责任。 欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。

© 2019-2020 Www.12360.Co

快速回复 返回顶部 返回列表