Client / Server Programming in Android

Download Report

Transcript Client / Server Programming in Android

Client / Server Programming
in Android
Eclipse IDE
Android Development Tools (ADT)
Android SDK
http://www.vogella.com/articles/Android/article.html
TCP Echo Client (1)
cs423- cotter
2
Android Mobile Development
1.
2.
3.
4.
Install Eclipse IDE
Install Android Development Tools (ADT)
Install Android SDK
Install specific Android Versions through SDK
Manager
5. Create / install an Android Virtual Device
(AVD)
cs423- cotter
3
Android SDK / AVD Managers
cs423- cotter
4
Android SDK Manager
cs423- cotter
5
AVD Manager
cs423- cotter
6
From file
menu, select
“New” then
“Project”
cs423- cotter
7
Identify
project
name
cs423- cotter
8
Identify the
desired SDK
(based on
the target
device)
cs423- cotter
9
Provide a
unique
package name
(reverse
Domain Name
+ project)
cs423- cotter
10
Empty Project Configuration
cs423- cotter
11
Main.xml – Graphical Layout
Empty Project
cs423- cotter
12
Main.xml – Graphical Layout
Completed Project
cs423- cotter
13
Main.xml
cs423- cotter
14
EchoClientActivity.xml
cs423- cotter
15
Strings.xml
cs423- cotter
16
AndroidManifest.xml
cs423- cotter
17
Base Android 2.2 Phone VD
cs423- cotter
18
Base Android 2.2 Phone VD
cs423- cotter
19
UDP Echo Client (1)
cs423- cotter
20
UDP Echo Client (2)
cs423- cotter
21
UDP Echo Client (3)
cs423- cotter
22
echoClient.apk
cs423- cotter
23
EchoClientActivity.java
package edu.umkc.cotterr.echo;
import android.app.Activity; android.os.Bundle; android.view.View; android.widget.EditText;
android.widget.Toast; java.net.*; java.io.*;
import edu.umkc.cotterr.echo.R;
public class EchoClientActivity extends Activity {
/** Called when the activity is first created. */
private EditText portNumber;
private EditText hostName;
private EditText inputMsg;
private EditText resultMsg;
private InetAddress ia;
private Socket mySocket;
private InputStream isIn;
private PrintStream psOut;
private byte abIn[];
cs423- cotter
24
EchoClientActivity.java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
hostName = (EditText) findViewById(R.id.editText1);
portNumber = (EditText) findViewById(R.id.editText2);
resultMsg = (EditText) findViewById(R.id.editText3);
inputMsg = (EditText) findViewById(R.id.editText4);
}
cs423- cotter
25
EchoClientActivity.java
public void myEchoHandler(View view) {
switch (view.getId()) {
case R.id.button1:
/* This is the connect button
String sHostName = hostName.getText().toString();
int iPortNumber = Integer.parseInt(portNumber.getText().toString());
try {
ia = InetAddress.getByName(sHostName);
mySocket = new Socket (ia, iPortNumber);
Toast.makeText(this,"We are now connected to: " + hostName +
"\n", Toast.LENGTH_LONG).show();
} catch (Exception ex) {
Toast.makeText(this,"Connect to " + hostName + "failed.
Exception" + ex + "\n", Toast.LENGTH_LONG).show();
}
break;
cs423- cotter
26
EchoClientActivity.java
case R.id.button2: /* This is the send data button */
String sResponse, sTemp
String sInputMsg = inputMsg.getText().toString();
int iNumRead;
abIn = new byte[1024];
try {
isIn = mySocket.getInputStream();
psOut = new PrintStream(mySocket.getOutputStream());
psOut.print(sInputMsg);
iNumRead = isIn.read(abIn,0,1024);
sTemp = new String(abIn, 0, iNumRead);
sResponse = "We got back: " + sTemp;
resultMsg.setText(sResponse);
} catch (Exception ex) {
Toast.makeText(this,"Send data failed. Exception" + ex + "\n",
Toast.LENGTH_LONG).show();
break;
cs423- cotter
}
27
EchoClientActivity.java
case R.id.button3: // This is the quit button.
String sTemp2;
try {
mySocket.close();
inputMsg.setText("");
sTemp2 = new String ("Goodbye ...");
resultMsg.setText(sTemp2);
}
catch (Exception ex) {
Toast.makeText(this,"Close socket failed. Exception“
+ ex + "\n", Toast.LENGTH_LONG).show();
}
} //end of switch
} //end of myEchoHandler
} //end of EchoClientActivity
cs423- cotter
28
R.java
package edu.umkc.cotterr.echo;
public final class R {
public static final class attr {
}
public static final class color {
public static final int backgroundColor=0x7f050000;
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
cs423- cotter
29
R.java
public static final class id {
public static final int button1=0x7f060004;
public static final int button2=0x7f060008;
public static final int button3=0x7f060009;
public static final int editText1=0x7f060001;
public static final int editText2=0x7f060003;
public static final int editText3=0x7f06000b;
public static final int editText4=0x7f060006;
public static final int linearLayout1=0x7f060007;
public static final int textView1=0x7f060000;
public static final int textView2=0x7f060002;
public static final int textView3=0x7f060005;
public static final int textView4=0x7f06000a;
}
cs423- cotter
30
R.java
public static final class string {
public static final int ConvertButton=0x7f040002;
public static final int DefaultHost=0x7f040003;
public static final int DefaultPort=0x7f040004;
public static final int app_name=0x7f040001;
public static final int connectButton=0x7f040007;
public static final int hello=0x7f040000;
public static final int hostname=0x7f040005;
public static final int input=0x7f040008;
public static final int port=0x7f040006;
public static final int quit=0x7f04000b;
public static final int result=0x7f040009;
public static final int send=0x7f04000a;
}
}
cs423- cotter
31
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent“
android:layout_height="fill_parent"
android:background="@color/backgroundColor"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1“
android:layout_width="wrap_content“
android:layout_height="wrap_content" android:text="@string/hostname"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editText1“
android:layout_width="201dp"
android:layout_height="wrap_content“
android:hint="@string/DefaultHost“
android:inputType="text" >
<requestFocus />
</EditText>
cs423- cotter
32
main.xml
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content“ android:layout_height="wrap_content"
android:text="@string/port"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editText2“
android:layout_width="73dp"
android:layout_height="wrap_content"
android:hint="@string/DefaultPort“
android:inputType="text"
android:width="100dp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content“ android:layout_height="wrap_content"
android:onClick="myEchoHandler"
android:text="@string/connectButton" />
cs423- cotter
33
main.xml
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/input"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editText4"
android:layout_width="match_parent"
android:inputType="text"
android:layout_height="wrap_content" />
cs423- cotter
34
main.xml
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="myEchoHandler"
android:text="@string/send" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/quit" android:onClick="myEchoHandler"/>
</LinearLayout>
cs423- cotter
35
main.xml
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/result"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/editText3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:height="100dp"
android:inputType="textMultiLine" />
</LinearLayout>
cs423- cotter
36
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, EchoClientActivity!</string>
<string name="app_name">Bob\'s EchoClient</string>
<color name="backgroundColor">#002864</color>
<string name="ConvertButton">Convert</string>
<string name="DefaultHost">localhost</string>
<string name="DefaultPort">3456</string>
<string name="hostname">Hostname</string>
<string name="port">Port</string>
<string name="connectButton">Connect</string>
<string name="input">User Input</string>
<string name="result">Echo Results</string>
<string name="send">Send Echo</string>
<string name="quit">Exit Echo</string>
</resources>
cs423- cotter
37
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.umkc.cotterr.echo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".EchoClientActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
cs423- cotter
38
Summary
• Android Development has strong support in
Eclipse IDE
• Core Android language is Java, with a full
library of Android classes
cs423- cotter
39