首页 >> 实验教学 >> 实验项目 >> 详细内容
实验教学
 
实验项目 >> 正文
Android 实验指导书
日期:2021-12-09 18:29:51  发布人:nclgjsj  浏览量:155

 

 实验项目及内容列表

 

序号

验 项 目

要 内 容

实验性质

实验类型

学时分配

每级人数

备注

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#512PC

 实验步骤:

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按钮弹出虚拟机参数配置界面,选择适宜的虚拟机参数比如屏幕大小、分辨率、内存RAMSD卡大小等,填入后点击OK创建完毕后关闭虚拟机管理页面。

3 运行虚拟机

4 当出现虚拟机解锁标志则说明虚拟机配置成功

 

 

 实验器材:s#512PC

 实验步骤:

       1 建立虚拟机

       2 设置Android虚拟机配置的具体参数

首先,根据测试仿真需要配置一个虚拟机,如下图所示,打开Eclipse软件后,在主界面点击Android Virtual Device Manager,出现虚拟机管理界面,点击New按钮弹出虚拟机参数配置界面,选择适宜的虚拟机参数比如屏幕大小、分辨率、内存RAMSD卡大小等,填入后点击OK创建完毕后关闭虚拟机管理页面。

       3 运行虚拟机

       4 当出现虚拟机解锁标志则说明虚拟机配置成功

 

 实验结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 实验小结:

1  如何配置虚拟手机屏幕大小使得界面横着显示?

2  如何显示虚拟机的界面?

 

 

实验三  第一个Android手机APP程序     

 实验目的与要求:

  1  掌握android工程的创建

  2  掌握字符串资源xml设置

  3  掌握字符串资源的xml调用

  4  掌握活动创建及显示字符串的java代码

 实验内容:

1创建android工程

2配置字符串资源xml

3调用字符串资源

4编程实现活动创建及显示字符串hello china

实验器材:s#512PC

实验步骤:

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#512PC

 实验步骤:

  

 应用程序清单如下:

//=========================================//显示20hello 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#512PC

 实验步骤:

实验清单

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#512PC

 实验步骤:

实验清单

  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#512PC

 实验步骤:

实验清单

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 程序还有那些不足?

核发:nclgjsj 点击数:155收藏本页