一 实验项目及内容列表
序号 |
实 验 项 目 |
主 要 内 容 |
实验性质 |
实验类型 |
学时分配 |
每级人数 |
备注 |
1 |
Android开发环境搭建 |
1.掌握JDK,ADT,SDK的安装与eclipse配置 2.掌握使用eclipse开发应Android开发环境搭建 |
验证 |
|
2 |
|
|
2 |
Android虚拟机配置 |
1. 新建Android 虚拟机 2. 掌握Android虚拟机配置的具体参数设置 3. 运行android虚拟机 |
验证 |
|
2 |
|
|
3 |
第一个Android手机APP程序 |
1.掌握android工程的创建 2.掌握字符串资源xml设置 3.掌握字符串资源的xml调用 4.掌握活动创建及显示字符串的java代码 |
综合 |
|
4 |
|
|
4 |
Android显示多行hello china并显示行号 |
1.掌握Android 滚动条容器 2.容器添加文本框 3.掌握超屏幕内容显示方法 4.掌握布局资源的编写与应用 |
设计 |
|
4 |
|
|
5 |
Android活动的生命周期 |
1.掌握Android 活动创建周期 2.掌握Android 活动启动周期 3.掌握Android 活动运行周期 4.掌握Android 活动暂停周期 5.掌握Android 活动停止周期 6.掌握Android 活动销毁周期 7.掌握这6种周期方法的人为调用和回调条件 |
综合 |
|
4 |
|
|
6 |
登录功能设计 |
相对布局的xml标签配置 口令文本框xml标签配置 按钮xml标签配置 登录密码检测条件 |
设计 |
|
4 |
|
|
7 |
Android套接字编程 |
1. 掌握Android包的socket类 2.掌握使用活动内部端口号链接方法编程 3.掌握使用活动内部ip地址方法编程 4.掌握xml容器类的布局方法 5.掌握android 组件事件的编程 |
设计 |
|
4 |
|
|
实验一 Android开发环境搭建
一 实验目的与要求:
1 熟悉并掌握Android应用程序开发的搭建;
2 通过讲师演示实验,使学生对实验设备的功能有一个直观的认识从而激发学习android课程学习的热情。
二 实验内容:
1 安装java jdk 1.7 因为开发android 需要用到eclipse。而eclipse 必须要有java jdk的支持,所以首先我们需要安装好java jdk 2 配置jdk环境变量
3 安装eclipse
4 安装sdk管理器,下载4.0.2Android操作系统sdk开发包插件
5 下载ADT虚拟机插件
6 打开eclipse在帮助菜单下的安装新软件安装ADT虚拟机插件
7 重启eclipse
8 再次打开eclipse,安装sdk开发包插件的路径
三 实验器材:s#512-PC
四 实验步骤:
1 安装java jdk 1.7
3 安装eclipse
4 安装sdk管理器,下载4.0.2Android操作系统sdk开发包插件
5 下载ADT虚拟机插件
6 打开eclipse在帮助菜单下的安装新软件安装ADT虚拟机插件
7 重启eclipse
8 再次打开eclipse,安装sdk开发包插件的路径
五 实验结果:
安装结束后,并配置好,环境搭建好后可以出现创建Android工程的图标
六 实验小结
1 是否能数量配置jdk环境变量?
2 是否能先安装SDK再安装ADT?
3 怎样判断环境搭建成功?
实验二 Android虚拟机配置
一 实验目的与要求:
1 掌握如何新建Android 虚拟机
2 掌握Android虚拟机配置的具体参数
3 运行Android虚拟机
二 实验内容:
1 建立虚拟机
2 设置Android虚拟机配置的具体参数
首先,根据测试仿真需要配置一个虚拟机,如下图所示,打开Eclipse软件后,在主界面点击Android Virtual Device Manager,出现虚拟机管理界面,点击New按钮弹出虚拟机参数配置界面,选择适宜的虚拟机参数比如屏幕大小、分辨率、内存RAM、SD卡大小等,填入后点击OK创建完毕后关闭虚拟机管理页面。
3 运行虚拟机
4 当出现虚拟机解锁标志则说明虚拟机配置成功
三 实验器材:s#512-PC
四 实验步骤:
1 建立虚拟机
2 设置Android虚拟机配置的具体参数
首先,根据测试仿真需要配置一个虚拟机,如下图所示,打开Eclipse软件后,在主界面点击Android Virtual Device Manager,出现虚拟机管理界面,点击New按钮弹出虚拟机参数配置界面,选择适宜的虚拟机参数比如屏幕大小、分辨率、内存RAM、SD卡大小等,填入后点击OK创建完毕后关闭虚拟机管理页面。
3 运行虚拟机
4 当出现虚拟机解锁标志则说明虚拟机配置成功
五 实验结果:
六 实验小结:
1 如何配置虚拟手机屏幕大小使得界面横着显示?
2 如何显示虚拟机的界面?
实验三 第一个Android手机APP程序
一 实验目的与要求:
1 掌握android工程的创建
2 掌握字符串资源xml设置
3 掌握字符串资源的xml调用
4 掌握活动创建及显示字符串的java代码
二 实验内容:
1创建android工程
2配置字符串资源xml
3调用字符串资源
4编程实现活动创建及显示字符串hello china
三 实验器材:s#512-PC
四 实验步骤:
1 创建android工程
2 配置字符串资源xml
3 调用字符串资源
4 编程实现活动创建及显示字符串hello china
五 实验程序清单
(1)界面代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
>
<TextView
android:text="@string/aaa"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
(2) 字符串资源配置代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">One</string>
<string name="aaa">Hello china!</string>
</resources>
(3)调用字符串并显示界面代码
package com.lihuang;
import android.app.*;
import android.os.*;
public class MainActivity extends Activity
{ @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
五 实验结果:
六 实验小结:
1 如何将hello China 显示在屏幕左上角?
3 如何改变字体大小?
实验四 Android显示多行hello china并显示行号
一 实验目的与要求:
1 掌握Android 滚动条容器
2 容器添加文本框
3 掌握超屏幕内容显示方法
4 掌握布局资源的编写与应用
二 实验内容:
1 设置Android 滚动条容器
2 在容器添加文本框
3 编写循环显示行号的hello china
4 布局资源的编写调用显示多行
三 实验器材:s#512-PC
四 实验步骤:
应用程序清单如下:
//=========================================//显示20次hello china!
package com.example.one;import
android.support.v7.app.ActionBarActivity;import
android.os.Bundle;import
android.widget.TextView;
public class MainActivity extends ActionBarActivity
{ TextView a1;
@Override
protected
voidonCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main); a1=(TextView)this.findViewById(R.id.nr);
String nr="";
int i;
for(i=1;i<=20;i++) {
nr=nr+"第"+String.valueOf(i)+"行"+"Hello China"+"\n";
} a1.setText(nr); }
//======================================================界面代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.one.MainActivity$PlaceholderFragment" >
<TextView
android:id="@+id/nr"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
//========================================//资源id
public static final class id {
public static final int
action_bar=0x7f05001c;}
//============================================//字符串资源
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">One</string> <string name="aaa">Hello China!</string> <string name="action_settings">Settings</string></resources>
五 实验结果:
六 实验小结:
1 为何做多行显示?
2 行号如何显示在行尾?
3 这些内容是一个还是多个字符串?
实验五 Android活动的生命周期
一 实验目的与要求:
1掌握Android 活动创建周期
2掌握Android 活动启动周期
3掌握Android 活动运行周期
4掌握Android 活动暂停周期
5掌握Android 活动停止周期
6掌握Android 活动销毁周期
7掌握这6种周期方法的人为调用和回调条件
二 实验内容:
1 Android 活动创建周期
2 Android 活动启动周期
3 Android 活动运行周期
4 Android 活动暂停周期
5 Android 活动停止周期
6 Android 活动销毁周期
7测试6种周期方法的人为调用和回调条件
三 实验器材:s#512-PC
四 实验步骤:
实验清单
package com.lihuang;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.os.Bundle;
public class MainActivity extends ActionBarActivity {
final String TAG="***生命周期***";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "活动正在创建");
}
protected void onStart(){
super.onStart();
Log.i(TAG, "活动正在运行");
}
protected void onStop(){
super.onStop();
Log.i(TAG, "活动结束");
}
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "活动销毁");
}
}
五 实验结果:
在information 日志里查看活动周期的执行顺序
六 实验小结:
1 什么是回调方法?
2 什么周期是回调的?
实验六 登录功能设计
一 实验目的与要求:
1掌握相对布局的xml标签配置
2掌握口令文本框xml标签配置
3掌握按钮xml标签配置
二 实验内容:
(1)用相对布局编写登录界面。
三 实验器材:s#512-PC
四 实验步骤:
实验清单
package com.nclg.okk;
import android.app.*;
import android.os.*;
import android.content.Intent;
import android.view.View.OnClickListener;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity
{
Button bn,bexit;
EditText passwd;
int njm=0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bn=(Button)findViewById(R.id.button02);
bexit=(Button)findViewById(R.id.button01);
passwd=(EditText)findViewById(R.id.edittext02)
bn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(passwd.getText().toString().trim().equals("0"))
{
njm=0;
Intent i = new Intent(MainActivity.this , NMainActivity.class);
startActivity(i);
finish();
}
else{
njm=njm+1;
bexit.setText("密码错误,请输入,目前输错"+njm+"次");
if(njm==3)
{
bexit.setText("目前输错"+njm+"次,系统锁定");
bn.setEnabled(false);
}
passwd.setText("");
}
}
});
bexit.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(njm==0)
{
finish();
}
if(njm==3)
{
System.exit(0);
}
}
});
}
}
五 实验结果:
六 实验小结:
1 按钮该如何修改不至于显示那么长?
2 程序还有那些不足?
实验七 Android套接字编程
一 实验目的与要求:
1. 掌握Android包的socket类
2.掌握使用活动内部端口号链接方法编程
3.掌握使用活动内部ip地址方法编程
4.掌握xml容器类的布局方法
5.掌握android 组件事件的编程
二 实验内容:
实现安卓手机与电脑直接局域网通信
三 实验器材:s#512-PC
四 实验步骤:
实验清单
package com.nclg.okk;
import android.app.*;
import android.os.*;
import android.content.Intent;
import android.provider.Settings;
import android.view.View.OnClickListener;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.ServerSocket;
import java.util.Enumeration;
import java.net.NetworkInterface;
import java.net.InetAddress;
import java.net.Inet4Address;
import android.net.wifi.WifiManager;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.util.Log;
import android.telephony.TelephonyManager;
import java.security.cert.*;
import java.net.UnknownHostException;
import java.io.IOException;
class Bb
{
public Bb() {
}
}
public class Fs extends Activity
{
Button btui,bfs;
EditText ipnr,fsnr,dknr;
TextView t1;
String xx;
Handler handler;
public String getInfo()
{
TelephonyManager mTm=(TelephonyManager)this.getSystemService(TELEPHONY_SERVICE);
String ANDROID_ID = Settings.System.getString(getContentResolver(), Settings.System.ANDROID_ID);
String imei=mTm.getDeviceId();
String imsi=mTm.getSubscriberId();
String mtype=android.os.Build.MODEL;// 手机型号
String mtyb=android.os.Build.BRAND;//手机品牌
String numer=mTm.getLine1Number();// 手机号码,有的可得,有的不可得
//return("手机IMEI号:"+imei+"手机IESI号:"+imsi+
xx="手机型号:"+mtype+"\t 手机品牌:"+mtyb+"\t特征码:"+ANDROID_ID;
return("手机型号:"+mtype+"\t 手机品牌:"+mtyb+"\t特征码:"+ANDROID_ID+"\t本机ip:"+getIpAddress());
//+"手机号码"+numer);
}
public String getMacAddress()
{
String result="";
WifiManager wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo=wifiManager.getConnectionInfo();
result=wifiInfo.getMacAddress();
//Log.i("text","手机macAdd:"+result);
return result;
}
public String getIpAddress()
{ try
{ for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces();
en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr=intf.getInetAddresses();
enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address)
{ // if (!inetAddress.isLoopbackAddress() && inetAddress
// instanceof Inet6Address) {
return inetAddress.getHostAddress().toString(); } } } }
catch (Exception e) { }
return null; }
class MyThread extends Thread {
public void run()
{
ServerSocket ss=null;
Socket socket = null;
try
{
ss=new ServerSocket (54321);
socket=ss.accept();
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"GBK")),true);
out.println(fsnr.getText().toString().trim());
out.close();
ss.close();
}
catch (Exception e) {System.out.println("wrong");
ipnr.setText("ip地址错误,重新输入");}
}
}
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.send);
fsnr=(EditText)findViewById(R.id.fsedittext02);
ipnr=(EditText)findViewById(R.id.fsedittext03);
dknr=(EditText)findViewById(R.id.fsedittext03a);
btui=(Button)findViewById(R.id.fsbutton01);
bfs=(Button)findViewById(R.id.fsbutton02);
t1=(TextView)findViewById(R.id.fstextview000);
t1.setText(getInfo());
ipnr.setEnabled(false);
dknr.setEnabled(false);
//ipnr.setText("103.44.145.245");
//dknr.setText("16752");
//ipnr.setText("192.168.1.106");
//dknr.setText("54321");
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x123)
{ // 将读取的内容追加显示在文本框中
}
}
};
btui.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Fs.this , NMainActivity.class);
startActivity(i);
finish();
}
});
bfs.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new Thread()
{ public void run()
{ Socket so;
ServerSocket ss;
try
{ //本机是服务器
ss=new ServerSocket (54321);
so=ss.accept();
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(so.getOutputStream(),"GBK")),true);
//out.println(xx+getIpAddress()+"客户端发送数据是:"+fsnr.getText().toString().trim());
out.println(fsnr.getText().toString().trim());
out.close();
so.close();
ss.close();
}
catch (UnknownHostException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
} }.start();
}
});
}
}
五 实验结果:
六 实验小结:
1 按钮该如何修改不至于显示那么长?
2 程序还有那些不足?