80 likes | 91 Views
Develop a simple chat app using UDP broadcast to send and receive messages on the local network. Enhance the app further by adding features like message names, images, and handling app lifecycle.
E N D
Android Introduction Hello Threads @2010 Mihail L. Sichitiu
Goal • Create a basic chat application that uses broadcast UDP to send and receive messages on the local network (75%) • Improve the chat application (25%) You: Your text @2010 Mihail L. Sichitiu
Layout ListView showing both the messages sent as well as received EditText allowing users to enter text to be sent Send button – sends the text You: Your text @2010 Mihail L. Sichitiu
Application Structure ServerThread Main Activity Constructor Open the Socket If successful – “Server Started” Find the broadcast IP Address Find the IP Address OnCreate( ) Create the thread Start the thread run( ) while (socketStillOpen){ receive packet display Message send reply } Message Handler OnDestroy( ) close the socket sendPacket( ) send UDP OnClickListener( ) Send Message @2010 Mihail L. Sichitiu
Main Activity (HelloThreads) • ClassMembers • EditTextmsg; // For typing the message • Button send; // For sending the message • ListViewmsgList; // For displaying the message list • ArrayAdapter <String>receivedMessages; // Holds the list of messages • ServerThreadmyThread; // The server thread handling all networking • Handler myHandler...... Similar to the one in HelloThreads • OnCreate( ) • Get handles (findViewById) to all GUI elements • msgList = (ListView)findViewById(R.id.msgList); • receivedMessages = new ArrayAdapter<String>(this, R.layout.message); • msgList.setAdapter(receivedMessages); • Create ServerThread: myThread=new ServerThread(getApplicationContext(),mHandler) • Start the Thread: myThread.start(); • Register the OnClickListener for the Send Button • OnDestroy( ) • OnClickListener( ) case PACKET_CAME: String incomingMessage = (String) msg.obj; receivedMessages.add("You: "+incomingMessage); @2010 Mihail L. Sichitiu
ServerThread • public class ServerThread extends Thread • Class Members • Handler mHandler; // Handler for messages in the main thread • Context mContext; // Context to the application (for getting ip Addresses) • DatagramSocketserverSocket; // Socket used both for sending and receiving • booleansocketOK=true; // True as long as we don't get socket errors • InetAddressmyBcastIPAddress; // my broadcast IP addresses • InetAddressmyIPAddress; // my IP addresses • public ServerThread(Context currentContext,Handler handler){ • mContext = currentContext; • mHandler = handler; • try • serverSocket = new DatagramSocket(PORT); • serverSocket.setBroadcast(true); ... catch and handle the exception • try getMyWiFiBcastAndIPAddress(); ... catch and handle the exception • run( ) – similar to HelloThreads, without the reply • sendPacket(String msg) – similar to UDP sender in HelloSockets @2010 Mihail L. Sichitiu
Getting the IP Address: getMyWiFiBcastAndIPAddress( ); WifiManager mWifi = (WifiManager) (mContext.getSystemService(Context.WIFI_SERVICE)); WifiInfo info = mWifi.getConnectionInfo(); DhcpInfo dhcp = mWifi.getDhcpInfo(); int myIntegerIPAddress = dhcp.ipAddress; int myIntBroadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask; 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 } @2010 Mihail L. Sichitiu
Improvements • Your choice of examples – below are only examples • Different improvements are worth different amount of points • Max points 125% • Examples (only examples – go wild!): • Add names to the messages • Add images • Add voice • Add preferences • Handle Application lifecycle (on restart, on pause, on resume, etc.) • Vibrate or notify on receipt of a new message • Handle landscape/portrait • Localize it • Looks (background, icon, button, etc.) • Make utility for saving all messages in a file @2010 Mihail L. Sichitiu