JAVA实训报告

时间:2024.4.5

实训报告书

实训名称:     android平台的视频播放器 

         (部)    信息工程系        

专业班级     计算机10-2      

学生姓名     张为为            

    号:     1043030147        

指导教师:     张民               

完成日期:      20##117  

山东科技大学泰山科技学院

   

1实训目的........................................................................................ 1

2视频播放器的分析与设计...................................................................................... 1

3实训内容........................................................................................ 1

4时间安排........................................................................................ 2

5工作安排........................................................................................ 2

附录........................................................................................... 6


基于andriod平台视频播放器系统的设计与实现

1实训目的

《嵌入式应用开发技术》是计算机专业一门重要的专业技术实践课程。为了能够较好的完成实训任务,学生应具备嵌入式系统和软件开发的基础知识,实训的主要目的在于将理论与实际应用相结合,使用程序设计语言java,以及相关软件设计开发知识完成软件的设计开发任务。本实训课程将为整个专业的学习以及软件设计水平的提高打下良好的基础,提高学生项目分析、设计、编写、调试和测试的能力,并培养基本的、良好的团队合作能力。

2视频播放器系统的设计与实现

2.1系统功能描述

一个基于Android平台的视频播放器

基本要求:

 (1)能够播放.avi,.mp4等文件

 (2)能处理简单的异常,例如文件不存在等

 (3)能正常启动,退出

 (4)能够在手机上使用该系统

 2.2  系统模块设计

主要功能:

功能介绍:根据分析需求,这个支持视频格式文件的播放功能,导入要播放的视频文件到指定文件夹下,播放时只可以选定文件夹的视频就可以。设计的软件支持快进,暂停,继续,复位重复播放等功能,视频播放软件工程文件主要包括src文件夹下,可以直接定位到sdcard中的文件进行播放。

2.3  数据库结构设计

数据库设计是信息资源管理模式的有效手段。对视频文件的存储,读取主要是通过SQLite。SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。 数据库设计是指:对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。

该播放器设计上分为两部分,一是播放及其过程的流程控制,一个是通过数据库对播放文件的存储,读取。

在播放及其过程的流程控制中主要重视文件在播放过程中的可能存在的状态,比如暂停,停止,列表中的上个视频等按键功能。

在数据库对播放文件的存储,读取中主要注重scard中的所有文件操作。在视频文件的播放,以及播放文件的存储读取时具有的交互作用。

系统主要分析:

3 主要代码清单

3.1播放控制功能的设计

在打开播放文件之后,点击画面的提示图标,分别有前进,暂停,播放等按键功能

数据库技术是信息资源管理最有效的手段。数据库设计是指:对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。

3.2主要程序清单

Src:MainActivity.java

package com.example.videoplayer;

import java.io.File;

import java.io.IOException;

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.os.Environment;

import android.app.Activity;

import android.util.Log;

import android.view.Menu;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ImageButton;

import android.widget.Toast;

public class MainActivity extends Activity {

       private static final String TAG = "MainActivity";//

       private EditText filenameText;

       private String filename;

       private int position;

       private MediaPlayer mediaPlayer;

       private SurfaceView surfaceView;

       @SuppressWarnings("deprecation")

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.main);

              filenameText = (EditText) this.findViewById(R.id.filename);//设置一个识别代码

              mediaPlayer = new MediaPlayer();

              surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);

              surfaceView.getHolder().setFixedSize(176, 144);// 设置分辨率

              surfaceView.getHolder()

//设置等待屏幕的渲染引擎将内容推送到用户面前,就是不缓冲直接显示视频

                            .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

//按钮功能能框

              ButtonClickListener listener = new ButtonClickListener(); //按键侦听识别函数

              ImageButton susButton = (ImageButton) this.findViewById(R.id.suspend);

              ImageButton resetButton = (ImageButton) this.findViewById(R.id.reset);

              ImageButton stopButton = (ImageButton) this.findViewById(R.id.stop);

              //设置按键识别函数接口

              playButton.setOnClickListener(listener);

              susButton.setOnClickListener(listener);

              resetButton.setOnClickListener(listener);

              stopButton.setOnClickListener(listener);

       }

//一下实现View.OnClickListene,实现它的播放

       private final class ButtonClickListener implements View.OnClickListener {

              @Override

              public void onClick(View v) {

                     // TODO Auto-generated method stub

                     if (!Environment.getExternalStorageState().equals(

                                   Environment.MEDIA_MOUNTED)) {

                            Toast.makeText(MainActivity.this, R.string.sdcarderror, 1)

                                          .show();

                            return;

                     }

                     filename = filenameText.getText().toString();

//获取文件名后,来判断按钮是哪个功能,

                     try {

                            switch (v.getId()) {

                            case R.id.play:

                                   play();

                                   break;

                            case R.id.suspend:

                                   if (mediaPlayer.isPlaying()) {

                                          mediaPlayer.pause();

                                   } else {

                                          mediaPlayer.start();

                                   }

                                   break;

                            case R.id.reset:

                                   if (mediaPlayer.isPlaying()) {

                                          mediaPlayer.seekTo(0);

                                   } else {

                                          play();

                                   }

                                   break;

                            case R.id.stop:

                                   if (mediaPlayer.isPlaying()) {

                                          mediaPlayer.stop();

                                   }

                            }

                     } catch (Exception e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                            Log.e(TAG, e.toString());

                     }

              }

       }

       private void play() throws IOException { //检测异常并抛出相应的异常

              File videoFile = new File(Environment.getExternalStorageDirectory(),

                            filename);

              mediaPlayer.reset();// 重置为初始状态

              mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

              mediaPlayer.setDisplay(surfaceView.getHolder());

              mediaPlayer.setDataSource(videoFile.getAbsolutePath());

              mediaPlayer.prepare();// 缓冲

              mediaPlayer.start();// 播放

       }

}

Gen下的R.JAVA代码

package com.example.videoplayer;

publicfinalclass R {

    publicstaticfinalclass attr {

    }

    publicstaticfinalclass dimen {

        /**  Default screen margins, per the Android Design guidelines.

         Customize dimensions originally defined in res/values/dimens.xml (such as

         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.

   

         */

        publicstaticfinalint activity_horizontal_margin=0x7f040000;//水平宽度

        publicstaticfinalint activity_vertical_margin=0x7f040001;//垂直高度

    }

    publicstaticfinalclass drawable {

        publicstaticfinalint ic_launcher=0x7f020000;

        publicstaticfinalint play=0x7f020001;//开始播放

        publicstaticfinalint reset=0x7f020002;//重复播放

        publicstaticfinalint stop=0x7f020003;

        publicstaticfinalint suspend=0x7f020004;

    }

    publicstaticfinalclass id {

        publicstaticfinalint action_settings=0x7f080007;

        publicstaticfinalint ed=0x7f080001; 

//对应activity程序中的文件名

        publicstaticfinalint item1=0x7f080008;

        publicstaticfinalint play=0x7f080002; //播放地址

        publicstaticfinalint reset=0x7f080004; 重复播放

        publicstaticfinalint stop=0x7f080005;  停止播放

        publicstaticfinalint surfaceView=0x7f080006;

        publicstaticfinalint suspend=0x7f080003;

        publicstaticfinalint textview=0x7f080000;

//按键设置框变量

    }

    publicstaticfinalclass layout {

        publicstaticfinalint main=0x7f030000;

    }

    publicstaticfinalclass menu {

        publicstaticfinalint main=0x7f070000;

    }

    publicstaticfinalclass string {

        publicstaticfinalint action_settings=0x7f050001;

        publicstaticfinalint app_name=0x7f050000;

        publicstaticfinalint filename=0x7f050002;

        publicstaticfinalint sdcarderror=0x7f050003;

    }

    publicstaticfinalclass style {

        publicstaticfinalint AppBaseTheme=0x7f060000;

        publicstaticfinalint AppTheme=0x7f060001;

    }

}

图大小设置后的结果

4程序运行与测试

4.1 软件环境

完整的软件环境是有JDK安装和androidSDK安装,在eclips环境下进行调试,Eclipse采用的技术是IBM公司开发的SWT,这是一种基于Java的组件,

类似Java本身提供的AWT和Swing窗口:不过IBM声称SWT比其他Java窗口组件更有效率。Eclipse的用户界面还使用了GUI中间层JFace,从而简化基于SWT的应用程序的构建。Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其他所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基于内核包括:图形API(SWT/JFace),Java开发环境插件(JDT),插件开发

Eclipse的插件机制是轻型软件组件化架构。在富客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby、Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到现有环境中,例如配置管理,而决不仅限支持各种语言。

JDK开发java程序能够很快理解程序中的代码之间的关系,有利于解决java面向对象的设计思想。对java语言熟练程度,Android软件开发都是java语言来实现的,而java又是类来组成来实现的。

4.2程序调试与分析

此次程序运行采用的模拟器是android3.1,并且分别导入mp3,mp4等文件进

试。一开始系统点击视频播放器的图标进入视频播放器界面,执行videoplayeractivity.java,就可以执行视频播放器的操作了:播放,暂停,快进,退出等。

调试过程中遇到的一些问题:

开始运行run as 时模拟器启动不起来。原因是ram没存分配过大,运行不起来所致。解决办法:把运行内存改小了。调试后进入模拟器,图片不动态显示,只有界面显示,后来也没有解决怎么回事,改了下程序最后自己好了。

在向sdcard中导入文件时不能使用中文路径,程序好像不识别。方法把路径名用英文代替就好了。

在改工程关闭以后再次打开后,工程不能用,以为环境不可以,纠结了好久,后来发现workplace下没有工程导入。可是导入的时候导入成功了,关闭,关闭环境之后不可以了。最后重新弄环境,改在windows下面运行,才解决。

4.3最终运行结果如下:

该播放器设计上分为两部分,一是播放及其过程的流程控制,一个是通过数据库对播放文件的存储,读取。

在播放及其过程的流程控制中主要重视文件在播放过程中的可能存在的状态,比如暂停,停止,列表中的上个视频等按键功能。

在数据库对播放文件的存储,读取中主要注重scard中的所有文件操作。在视频文件的播放,以及播放文件的存储读取时具有的交互作用。

该播放器设计上分为两部分,一是播放及其过程的流程控制,一个是通过数据库对播放文件的存储,读取。

在播放及其过程的流程控制中主要重视文件在播放过程中的可能存在的状态,比如暂停,停止,列表中的上个视频等按键功能。

在数据库对播放文件的存储,读取中主要注重scard中的所有文件操作。在视频文件的播放,以及播放文件的存储读取时具有的交互作用。

手机运行截图:

5实训总结

5.1环境总结:

首先对andriod环境有个比较全面熟悉的了解。Android所有布局都放在res/layout中,所有菜单功能都在menu中。此次课程设计中不仅了解到android的有关知识,课程设计要求,想好系统应包含哪些功能模块,否则一头雾水。开始不知道怎么弄,前两天都没有什么头绪,就是因为总体模块不了解,只有了解各个模块功能才可以。

5.2 调试过程中遇到的一些问题:

 开始运行run as 时模拟器启动不起来。原因是ram没存分配过大,运行空间太小所致。解决办法:把运行内存改小了。

调试后进入模拟器,图片不动态显示,只有界面显示,后来也没有解决怎么回事,改了下程序最后自己好了。

在向sdcard中导入文件时不能使用中文路径,程序好像不识别。方法把路径名用英文代替就行了。

刚开始检测视频播放器时出现黑屏,上网上查说,android模拟器的事,andriod在2.0以后就有这个dbug。

调试时出现could not find videoplayer.apk

用点击菜单栏中的project>properties>java build path 选择libraries,点击按android3.7就行,可能版本太高不支持。

具备快速上网查资料的能力,对于新知识的接触要把所学知识活用,结合网上实例把自己知识用到实践中去。

如果一个类中没有够造方法,调用构造方法时系统自动给构造一个默认的无参的够造方法

当对象调用的构造方法已经有了就不会再自动构造必须与已有的参数保持一致。

最好先写一个无参构造方法普遍,public 类名{}。通过this引用调用类重载构造方法;根据参数类型和个数来判断哪个构造方法;

 5.3 还需要改进之处:

1播放器的播放界面比较简单,各个功能模块还要进一步完善。

2 播放器只支持。MP4,MP3格式,还应支持多媒体的其他格式

3 只能播放一个视频文件,且播放时不能显示不放歌曲的歌词,不能对多个文件上下选择进行播放,这是较大缺陷,以后再此基础上进一步扩充和改进。

更多相关推荐:
cad实习报告范文

cad实习报告范文cadgt实习报告gt范文一画了几天的图纸真是感慨颇多要画好一份图纸不要急于画首先要好好的观察它观察它的布局由哪几类线构成的观察好就可以开工啦一般来说开始画时要建立几个图层一定要按照图纸上给的...

cad实训心得1500字

cad实训心得1500字cad实训心得1500字一CAD实训总结为期一周的AutoCAD终于完了好呛啊每天不用上课起来就去机房画图回到宿舍还是画图可以说这个星期除了吃喝拉撒其他时间都在干同一件事画图不夸张的说连...

Cad实训报告

Cad实训报告为期一周的AutoCAD终于完了好呛啊每天不用上课起来就去机房画图回到宿舍还是画图可以说这个星期除了吃喝拉撒其他时间都在干同一件事画图不夸张的说连做梦都梦到在画图不过效果是显而易见实训的目的是让我...

cad实训报告

河南理工大学高等职业学院建筑CAD系别建筑工程专业建筑工程技术班级建筑111班姓名20xx年11月日2建筑CAD技能训练任务书一训练目的通过本次技能训练使学生进一步熟悉建筑制图国家标准的有关规定巩固制图的基本知...

cad实习报告

CAD实习报告经过这学期的理论和上机学习使我们对有了基本掌握对于CAD这个课程学习也有了一个系统的学习和掌握我学到的东西很多首先对于电脑绘图不熟悉的我有很大的帮助现在的我用AutoCAD绘图的速度快了很多而且知...

cad实训心得体会

cad实训心得体会20xx年下学期第十六周,在杨志勤老师的指导下,我们班进行了为期一周的CAD制图集中实训,主要是针对轴类、箱体类和叉架类等几种常见零件的绘制,通过实训,进一步掌握CAD的应用,增强动手cao作…

建筑cad软件应用实训报告

建筑cad软件应用实训报告一、实训目的AutoCAD是一种实用性很强的绘图软件,它可以快速,准确,方便的绘制和编辑出个各种工程图样,是工程专业的技术人员必备的基本技能。通过本次实训,要求学生熟练的掌握各种绘图命…

cad实习报告

图形图像制作09531班CAD实习报告陈姣前沿图形图像制作专业第二学期开的机械制图专业两周的实习课程是为巩固一学期的学习成果和熟练掌握并灵活运用所学知识绘制出正规的电气电路图从而为以后绘制复杂的图形打下坚实的基...

cad实习报告

20xx20xx学年第二学期实习名称cad实习专业学号姓名实习地点计算机实践中心实习时间实习成绩指导教师签字西南交通大学峨眉校区20xx年7月12日注后附纸若干内容包括实习目的和要求实习内容实习方式和安排实习完...

cad实习报告

cad实习报告cadgt实习报告一时间地点根据学校政策我们建筑装饰班在本学期第18周CAD上机实习主要是老师组织学生在学校阅览室内画建筑图纸二实行情况我们班由我们的AutoCAD认课老师卢燕卢老师指导学生们都在...

cad实习报告

20xx20xx学年第2学期实习名称AutoCAD绘图软件实习专业学号姓名实习地点网络中心四楼实习时间七月九日七月十一二日实习成绩指导教师签字西南交通大学峨眉校区二一三年七月十一二日一实习目的1巩固和进一步加学...

西南交大cad实习报告

20xx20xx学年第2学期实习名称AUTOCAD实习专业学号姓名实习地点网络中心三楼机房实习时间实习成绩指导教师签字西南交通大学峨眉校区20xx年7月12日AUTOCAD实习情况汇总一实习目的AUTOCAD是...

cad实训报告范文(2篇)