10
1 Android Introduction Hello Threads

Android Introduction

Embed Size (px)

DESCRIPTION

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). - PowerPoint PPT Presentation

Citation preview

Page 1: Android Introduction

1

Android Introduction

Hello Threads

Page 2: Android Introduction

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

Page 3: Android Introduction

3

Layout

152.4.244.125

Text sent from UDPClient

TextView that changesfrom “Starting Server” to “Server Started” (optional)

TextView that shows the text sent from UDPClient

TextView that shows the IP address of the server(needed for UDPClient)

Clear Button – clears the Last Message (and shows that interface is still responsive)

Page 4: Android Introduction

4

Application StructureMain Activity ServerThread UDPClient

OnCreate( ) Create the thread Start the thread

OnDestroy( ) close the socket

Constructor Open the Socket If successful – “Server Started” Find and display the IP Address

run( ) while (socketStillOpen){ receive packet display Message send reply }

Read line from input

Send line to Server

Receive line from Server

Display lineOnClickListener( ) Clear the Last Message

Message Handler

HelloThreads UDPClient

Page 5: Android Introduction

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 onNext page

Page 6: Android Introduction

The Handler Definition private final Handler mHandler = new Handler() {

public void handleMessage(Message msg) {   switch (msg.what) { case PACKET_CAME: String incomingMessage = (String) msg.obj; lastMessage.setText(incomingMessage); break; case IS_RUNNING: String socketStatus = (String) msg.obj; isRunning.setText(socketStatus); break; case IP_ADDRESS: InetAddress myIPAddress = (InetAddress) msg.obj; myIPAddressField.setText("Server IP

Address:"+myIPAddress.toString()); break; }

} };

6

Page 7: Android Introduction

7

ServerThread public class ServerThread extends Thread Class Members

Handler mHandler; // link to the Message Handler Context mContext; // link to application context DatagramSocket serverSocket; // 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(); InetAddress myIP = getMyWiFiIPAddress(); mHandler.obtainMessage(HelloThreads2.IP_ADDRESS, myIP).sendToTarget();

public void closeSocket() serverSocket.close();

public void run()

Allows the socket to be closed (call from OnDestroy())

On Next Page

On Next Next Page

Page 8: Android Introduction

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 }

Page 9: Android Introduction

9

ServerThread.run( ) boolean socketOK=true; // True as long as we don't get

socket errors while(socketOK) {

DatagramPacket receivePacket = 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)

To the Message Handler in the main Thread

Blocks

Handles multiple requests as long as the socket is OK

Page 10: Android Introduction

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" />

10