1 / 10

Android Introduction

Android Introduction. Hello Threads. Goal. Create an application that uses a background thread as a UDP server to receive messages from the UDP client. 152.4.244.125. Text sent from UDPClient. Layout. TextView that changes from “Starting Server” to “Server Started” (optional).

Download Presentation

Android Introduction

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Android Introduction Hello Threads

  2. Goal • Create an application that uses a background thread as a UDP server to receive messages from the UDP client 152.4.244.125 Text sent from UDPClient

  3. Layout TextView that changes from “Starting Server” to “Server Started” (optional) 152.4.244.125 TextView that shows the IP address of the server (needed for UDPClient) Text sent from UDPClient Clear Button – clears the Last Message (and shows that interface is still responsive) TextView that shows the text sent from UDPClient

  4. Application Structure ServerThread UDPClient Main Activity OnCreate( ) Create the thread Start the thread Constructor Open the Socket If successful – “Server Started” Find and display the IP Address Read line from input Send line to Server Receive line from Server Display line run( ) while (socketStillOpen){ receive packet display Message send reply } Message Handler OnDestroy( ) close the socket OnClickListener( ) Clear the Last Message HelloThreads UDPClient

  5. Main Activity (HelloThreads) • ClassMembers TextView isRunning,myIPAddressField,lastMessage; Button clear; ServerThread myThread; Handler • OnCreate( ) • Get handles (findViewById) to all GUI elements • Create ServerThread: myThread=new ServerThread(getApplicationContext(),mHandler) • Start the Thread: myThread.start(); • Register the OnClickListener for the Clear Button • OnDestroy( ) • myThread.closeSocket(); • OnClickListener( ) • Clear the Last Message Handler Definition on Next page

  6. The Handler Definition • privatefinal Handler mHandler = new Handler() { • publicvoidhandleMessage(Message msg) { • switch (msg.what) { • casePACKET_CAME: • String incomingMessage = (String) msg.obj; • lastMessage.setText(incomingMessage); • break; • caseIS_RUNNING: • String socketStatus = (String) msg.obj; • isRunning.setText(socketStatus); • break; • caseIP_ADDRESS: • InetAddressmyIPAddress = (InetAddress) msg.obj; • myIPAddressField.setText("Server IP Address:"+myIPAddress.toString()); • break; • } • } • };

  7. ServerThread • public class ServerThread extends Thread • Class Members • Handler mHandler; // link to the Message Handler • Context mContext; // link to application context • DatagramSocketserverSocket; // the UDP socket we’ll receive at • public ServerThread(Context currentContext,Handler handler){ • mContext = currentContext; • mHandler = handler; • Open the socket; if successful • mHandler.obtainMessage(HelloThreads2.IS_RUNNING, "Server Started").sendToTarget(); • InetAddressmyIP = getMyWiFiIPAddress(); • mHandler.obtainMessage(HelloThreads2.IP_ADDRESS, myIP).sendToTarget(); • public void closeSocket() • serverSocket.close(); • public void run() On Next Page Allows the socket to be closed (call from OnDestroy()) On Next Next Page

  8. Getting the IP Address: getMyWiFiIPAddress( ); WifiManager mWifi = (WifiManager) (mContext.getSystemService(Context.WIFI_SERVICE)); WifiInfo info = mWifi.getConnectionInfo(); DhcpInfo dhcp = mWifi.getDhcpInfo(); int myIntegerIPAddress = dhcp.ipAddress; byte[] quads = new byte[4]; for (int k = 0; k < 4; k++) quads[k] = (byte) ((myIntegerIPAddress>> k * 8) & 0xFF); try{ InetAddress myIPAddress = InetAddress.getByAddress(quads); return myIPAddress; }catch(Exception e){ if(D) Log.e(TAG,"Cannot Get My Own IP Address"); return null }

  9. ServerThread.run( ) • booleansocketOK=true; // True as long as we don't get socket errors • while(socketOK) { • DatagramPacketreceivePacket = new DatagramPacket(receiveData, receiveData.length); • try{ • serverSocket.receive(receivePacket); • /*** ..... Same as the UDP server ........ ****/ • mHandler.obtainMessage(HelloThreads2.PACKET_CAME,sentence).sendToTarget(); • } catch (Exception e){ • socketOK = false; • }// try • }// while(socketOK) Handles multiple requests as long as the socket is OK Blocks To the Message Handler in the main Thread

  10. Android Manifest • To be able to use the Internet (open sockets) and to read our own IP address (from the WiFi Manager): • <uses-permission android:name="android.permission.INTERNET" /> • <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

More Related