一、功能:
1.Android WIFI连接与断开,保存连接IP及端口。
2.WIFI控制3个继电器
3.16进制发送指令,可以单条和多条发送,用逗号隔开。
4.16进制接收
如需特别功能可以找我定制(程序源码,定制专家 手机:18910620895 旺旺:chenhao0568 QQ:345139427)。
二、源码如下:
登陆Login.java
package com.example.eeeee;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
@SuppressLint("NewApi")
public class Login<E, K, V> extends Activity {
public static Socket mSocket;
public static InputStream ips;
public static OutputStream ops;
// private final String DEBUG_TAG = "mySocketAct";
private String ip;
private String port;
//private ImageButton but7=null;
private EditText ServerIp = null;
private EditText ServerPort = null;
private Button btn_login = null;
private CheckBox remember;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.login); //“登陆”页面-------------------------------------------------------------------------------------------
this.ServerIp = (EditText)super.findViewById(R.id.et_ip);
this.ServerPort = (EditText)super.findViewById(R.id.et_port);
btn_login = (Button)this.findViewById(R.id.btn_login);
remember = (CheckBox)this.findViewById(R.id.cb_remember);
loadIpPort(); ////载入IP地址及端口
btn_login.setOnClickListener(new View.OnClickListener() { //按“登陆”按钮后的事件
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub //容错判断
ip = ServerIp.getText().toString().trim();
port = ServerPort.getText().toString().trim();
ServerIp.requestFocus();
if(ip==null|ip.trim().equals(""))
ServerIp.setError("请输入IP地址!");
if(port==null|port.trim().equals(""))
ServerPort.setError("请输入端口号!");
else
{
connect();
}
return;
}
});
}
public void saveIpPort() //保存IP地址及端口
{
SharedPreferences uiState = getSharedPreferences("RS485 Controller", MODE_PRIVATE);
Editor et=uiState.edit();
et.putString("ip",ServerIp.getText().toString());
et.putString("port",ServerPort.getText().toString());
et.commit();
}
public void loadIpPort() //载入IP地址及端口
{
SharedPreferences uiState = getSharedPreferences("RS485 Controller", MODE_PRIVATE);
ServerIp.setText(uiState.getString("ip","192.168.1.180" ));
ServerPort.setText(uiState.getString("port", "8899"));
}
public void connect() {
Toast.makeText(Login.this, "连接中……", Toast.LENGTH_SHORT).show();
new Thread(new Runnable() {
@Override
public void run() {
try {
mSocket = new Socket(InetAddress.getByName(ip),
Integer.parseInt(port));
// mSocket =new Socket("192.168.1.180",8899);
ops = mSocket.getOutputStream();
ips =mSocket.getInputStream();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
handler.sendMessage(handler.obtainMessage());
}
}).start();
}
// 消息处理队列
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (mSocket == null) {
Toast.makeText(Login.this, "连接失败,请重新登陆!", Toast.LENGTH_SHORT).show();
} else
{
Toast.makeText(Login.this, "连接成功!", Toast.LENGTH_SHORT).show();
if (remember.isChecked()) { saveIpPort();} //保存IP地址及端口
Intent intent = new Intent();
intent.setClass(Login.this,Relay.class);
startActivity(intent); //进入Login页面
// finish();
}
return false;
}
}
);
}
先上图: