1、獲得網路資訊
首先在AndroidManifest.xml中加入許可權
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Code代碼如下:
public class MainActivity extends Activity {TextView netWorkTextView;ConnectivityManager cManager;NetworkInfo networkInfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);netWorkTextView = (TextView)findViewById(R.id.networkInfo);cManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);}@Overrideprotected void onStart(){super.onStart();networkInfo = cManager.getActiveNetworkInfo();netWorkTextView.setText(networkInfo.toString());}}
顯示入:代表的意思,採用WIFI串連,其它不解釋。
2 .Socket的網路通訊
1)服務端: 建立Android工程SocketServerDemo。
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);startService(new Intent(this,SocketService.class));}}
SocketService類
public class SocketService extends Service{Thread mServiceThread;Socket client;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate(){super.onCreate();mServiceThread = new Thread(new SocketServerThread());}public class SocketServerThread extends Thread {private static final int PORT = 8801;private SocketServerThread() {}@Overridepublic void run() {// TODO Auto-generated method stubtry {ServerSocket serverSocket = new ServerSocket(PORT);while(true){System.out.println("begin client connected");client = serverSocket.accept();System.out.println("client connected");BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));System.out.println("read from client:");String textLine = reader.readLine();if (textLine.equalsIgnoreCase("EXIT")) {System.out.println("EXIT invoed, closing client");break;}System.out.println(textLine);PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())));writer.println("ECHO from server: " + textLine);writer.flush();writer.close();reader.close();}} catch (IOException e) {// TODO: handle exceptionSystem.err.println(e);}}}}
2)用戶端:建立Android工程SocketClientDemo
public class MainActivity extends Activity {private static final String SERVERIP = "192.168.1.100"; //自己電腦的IPprivate static final int SERVERPORT = 8801;TextView mMsgRev;EditText mMsgEdit;Button mMsgSendBtn;String mSendMsg;String mReceivedMsg;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mMsgRev = (TextView) findViewById(R.id.receive_msg);mMsgEdit = (EditText) findViewById(R.id.edit_msg);mMsgSendBtn = (Button) findViewById(R.id.send_msg);mMsgSendBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubSocket socket = null;mSendMsg = mMsgEdit.getText().toString();try {socket = new Socket(SERVERIP, SERVERPORT);PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));writer.println(mSendMsg);writer.flush();BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));mReceivedMsg = reader.readLine();if (mReceivedMsg != null) {mMsgRev.setText(mReceivedMsg);}else {mMsgRev.setText("receive data error");}writer.close();reader.close();socket.close();} catch (UnknownHostException e) {// TODO: handle exceptionLog.i("Error", e.getMessage());}catch (IOException e) {// TODO: handle exceptionLog.i("Error", e.getMessage());}}});}}
其中用戶端跑在我的平板上,服務端跑在My Phone上。然後再服務端的文字框中輸入文本,點擊Send按鈕,最後會收到資訊。
注意:兩個程式的連接埠號碼8801都是相同的,用戶端的IP地址是我的電腦IP地址,兩個程式都要有許可權
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
參考:基於Socket的網路通訊