Title: Android Introduction
1Android Introduction
2Goal
- Create a basic chat application that uses
broadcast UDP to send and receive messages on the
local network (75) - Improve the chat application (25)
3Layout
ListView showing both the messages sent as well
as received
EditText allowing users to enter text to be sent
Send button sends the text
4Application 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
5Main Activity (HelloThreads)
- ClassMembers
- EditText msg // For typing the message
- Button send // For sending the
message - ListView msgList // For displaying the
message list - ArrayAdapter ltStringgtreceivedMessages // Holds
the list of messages - ServerThread myThread // 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 ArrayAdapterltStringgt(this,
R.layout.message) - msgList.setAdapter(receivedMessages)
- Create ServerThread myThreadnew
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)
6ServerThread
- 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) - DatagramSocket serverSocket // Socket used
both for sending and receiving - boolean socketOKtrue // True as long as we
don't get socket errors - InetAddress myBcastIPAddress // my broadcast
IP addresses - InetAddress myIPAddress // 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
7Getting 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 byte4
- for (int k 0 k lt 4 k)
- quadsk (byte) ((myIntegerIPAddressgtgt k
8) 0xFF) - try
- InetAddress myIPAddress InetAddress.getByAdd
ress(quads) - return myIPAddress
- catch(Exception e)
- if(D) Log.e(TAG,"Cannot Get My Own IP
Address") - return null
-
8Improvements
- 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