手機 藍芽 控制 繼電器 無線門鎖 物聯網 安卓源碼 安卓開發 Android WIFI控制 詳細注釋測試穩定無bug,安卓android
一、功能:
1.Android WIFI串連與斷開,儲存串連IP及連接埠。
2.WIFI控制3個繼電器
3.16進位發送指令,可以單條和多條發送,用逗號隔開。
4.16進位接收
如需特別功能可以找我定製(程式源碼,定製專家 手機:18910620895 WangWang: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() { //按“登陸”按鈕後的事件 @Overridepublic 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() {@Overridepublic 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; }});}
先: