基于Android手机电子书阅读器的设计与实现.doc
《基于Android手机电子书阅读器的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于Android手机电子书阅读器的设计与实现.doc(37页珍藏版)》请在咨信网上搜索。
郑州大学毕业设计(项目报告) 题 目: 手机电子书阅读器的设计与实现 指导教师: 张淑艳 职称: 讲师 学生姓名: 王明 学号: 20117740444 专 业: 计算机科学与技术(软件测试) 院(系): 软件学院 完成时间: 2014年12月 2014年 12月 29日 目录 摘要1 1项目开发目标1 1。1项目来源1 1。2开发目标1 2项目总体设计2 2。1技术框架设计2 2.2数据库设计2 2.3功能框架设计5 3项目功能描述8 3。1软件欢迎界面模块功能描述8 3。2主界面功能描述10 3.3书籍管理模块功能描述12 3.4文件浏览模块功能描述16 3。5阅读管理模块功能描述20 3.5。1 章节管理模块功能描述24 3。5.2 书签管理模块功能描述27 3.5。3 搜索管理模块功能描述28 3.6设置管理模块功能描述29 3。7 使用帮助模块功能描述35 3。8 关于模块功能描述36 4项目技术总结38 4。1技术创新及特点38 4。2个人收获与体会44 4。3致谢44 摘要 在这个快节奏的时代,人们的空余时间越来越零碎,而且人们对智能手机的依赖越来越重,所以,一个拥有丰富功能且能随时进行电子书阅读的电子书阅读器的出现,则是我们刻不容缓的事情。 此软件是在Android平台上进行设计开发,此软件的开发是通过了客户需求分析阶段以及技术可行性分析阶段,然后进行总体设计阶段和详细设计编码等阶段。此软件不仅具有基本的电子书阅读功能,而且还拥有丰富的实用功能设计,例如目录自动生成以及阅读界面设置、阅读休息提醒等。经过不断的测试与完善,电子书阅读器功能稳定,并且在真机上对其进行了测试与验证,基本上达到了用户的需求标准。 关键字:电子书阅读器, Android,文件浏览,书架 36 1项目开发目标 1。1项目来源 此次开发的项目是手机电子书阅读器,属于自选项目.随着社会的发展,人们的生活节奏也越来越快空闲时间也越来越零碎,人们没有了大段的时间来进行书籍的阅读,所以一款能利用零碎时间进行随时阅读的软件成为了我们的需求。而一款能在人们随身携带的手机上运行的阅读软件成为了大家的选择。以前我们看看杂志,小说都要去图书馆借阅,而且时间有限,很不方便;而在电脑上看杂志,看小说,文档也是很不方便的.以此看来,一个好的手机阅读器软件的开发是相当有必要的。 1。2开发目标 手机电子书阅读器的开发目标就是让用户可以把零碎的空余时间有效的利用到书籍的阅读上,而且用户在没有网路的情况下也可以正常的进行书籍的阅读,让用户摆脱书籍的笨重携带不方便等确定,给予阅读者更大的便利性更好的舒适性.此软件是在Android平台上进行设计开发,它的界面丰富简洁但是却不简单,它包含了书架界面、文件查看界面、软件设置界面、书籍阅读界面等界面,它的功能全面。其优越性表现在:自动扫描手机里的所有书籍、手动从文件夹中选择添加书籍、自动为书籍生成章节目录、添加查看书签、全文关键词搜索、阅读主题选择、阅读字体大小设置等功能。此外,给用户更清晰方便的界面,也是本软件的出发点之一。 2项目总体设计 2.1技术框架设计 手机电子书阅读器采用了常见的三层架构,分别为UI层、业务逻辑层和数据层. UI层:数据展示与管理、用户交互、绘制、Adapter。 业务逻辑层:数据加式(数据层的数据有时候需要进行加工成UI层需要的数据)、数据变化的通知机制 数据层:数据访问(SQLite、文件等)、缓存(图片、文件等)、配置文件(sharedperference) 此软件的开发环境:Windows7 + Eclipse4。2。0 + SDK. UI Views Data Adapter UI BL Data Observer BL File SQLite Data Provider Memory Cache Local Data Util/Config Data 图1 软件框架结构 2.2数据库设计 E—R 图是直观表示概念模型的工具,它有四个基本成分: 矩形框,表示实体类型。 菱形框,表示联系类型。 椭圆形框,表示实体类型和联系类型的属性。对于关键码的属性,在属性名下划一横线。 直线,联系类型与其涉及的试题类型之间以直线连接. 图2 ER图 数据库使用了2个实体,分别为书籍、书签。 书籍与书签的对应关系为1:n. 在数据库的设计方面,为了实现数据库的完整性与一致性,我们使用了触发器,在数据库的选用上,选择了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎的SQLite数据库,数据库名称为eBook.db,共2个实体表,分别为书籍表、书签表。 与书籍(books)实体类的属性信息对应的字段信息表如表1所示: 字段名 类型 说明 book_id INTEGER 书籍编号 book_name TEXT 书籍名称 book_path TEXT 书籍路径 file_size TEXT 书籍大小 last_read DATETIME 阅读时间 book_shelf INTEGER 所属书籍 read_percentage DOUBLE 已读比例 pos INTEGER 阅读位置 表1 书籍表 书籍表(books)创建的SQL语句: CREATE TABLE books ( book_id INTEGER PRIMARY KEY, book_name TEXT NOT NULL, book_path TEXT NOT NULL UNIQUE, file_size TEXT, last_read DATETIME DEFAULT(datetime(CURRENT_TIMESTAMP,'localtime')), book_shelf INTEGER, read_percentage DOUBLE DEFAULT 0, pos INTEGER DEFAULT 0 ); 与书签(bookMarks)实体类的属性信息对应的字段信息表如表2所示: 字段名 类型 说明 id INTEGER 书签编号 book_id INTEGER 书籍编号 percent DOUBLE 位置比例 content TEXT 书签内容 pos INTEGER 书签位置 time DATETIME 添加时间 表2 书签表 书签表(bookMarks)创建的SQL语句: CREATE TABLE bookMarks ( idINTEGERPRIMARY KEY AUTOINCREMENT," book_idINTEGER," percentDOUBLE, contentTEXT, posINTEGER, timeDATETIME DEFAULT ( datetime( CURRENT_TIMESTAMP, ’localtime’ ) ) ); 触发器(fk_Delete)创建SQL语句: CREATE TRIGGER fk_DeleteBEFORE DELETE ON books FOR EACH ROW BEGIN DELETE FROM bookMarks WHERE book_id = old。book_id; END 2.3功能框架设计 图3 功能模块图 手机电子书阅读器软件主要分为8个功能大模块如图3所示,分别是欢迎模块、软件主界面、书籍管理、阅读管理、文件浏览、系统管理、使用帮助、关于.其中书籍模块中还要文件扫描模块,阅读管理中有章节管理、书签管理、搜索管理.系统设置中有密码设置.其各个模块的详细设计如下: 1.软件欢迎模块。该模块主要实现的功能是,通过Handler来实现一个2秒的缓冲界面,然后通过SharedPreferences读取配置文件,判断是否有密码.如果有密码则跳转至密码验证界面;如果没有密码则判断是否为第一次使用此软件,如果是第一次使用则跳转至引导页面。 2。软件主界面模块.该模块是一个通过TabHost标签组件来实现的一个分类管理功能.本界面的标签在屏幕的最下方,分别是:文件管理、我的书架、我的设置。点击不同的标签则显示不同的界面,默认显示标签为“我的书架”,打开选项中会出现对应的视图.实现了将本程序关联成手机默认打开程序中,即从外部打开文本文件时选择查看方式中会出现本软件图标供用户选择以本软件打开。 3.书籍管理。该模块是以书架的模式来展现书籍,并可以对书籍进行一些操作,本模块共有3个书架分别为:“最近阅读”、“历史阅读”、“收藏阅读",默认显示是“最近阅读”书架.本模块有导航按钮和书籍选择按钮.当弹出导航栏时,则把书籍从每行显示三本书籍调整到每行显示两本书籍。导航栏中与三大项:分类排序、添加书籍、清空书籍.每项里面又有子菜单。当点击导航里的按钮时会显示子功能导航,当再点击其它按钮时,会收起前面的子功能导航,展开当前的子功能。当单击书籍选择按钮时会弹出书籍选择窗口,选择里面的书架则进入相应的书架界面,同时还可以通过左右滑动来切换书架界面.当单击书籍时会打开相应的书籍阅读界面,长按某书籍时会弹出书籍操作窗口。 4.文件浏览。该模块使用ListView组件显示文件目录,不同的文件类型显示不同的图标.最上面标题栏有导航按钮,当点击导航按钮时会从左侧弹出导航栏,导航栏中有标记文件按钮、分类排序按钮和添加到书架按钮,点击标记文件按钮或长按某文件或目录时则切换到多选模式,其中有多选按钮、反选按钮和取消按钮;点击分类排序则弹出子菜单,其中有按名称排序、按大小排序、按时间排序和按类型排序;点击添加到书架时如果为选择文件则自动进入多选模式让用户进行文件选择,如果用户未选择则提示“请选择书籍”,进行选择是用户可选择文件或目录,系统会自动进行扫描,把符合要求的文件添加到“最近书架"中,并弹出提示信息,其中有失败个数、已存在个数和成功个数。在多选模式下点击返回按钮或点击标记文件会取消多选模式。非多选模式下,用户点击文件时本软件会根据文件扩展名来判断打开文件方式,如果是文本文件则直接用本软件打开,并把其添加到“最近书架"中,其它格式则调用对应的软件打开,如果是未识别的类型则提示“没有打开此文件的应用"。 5。阅读管理。该模块通过自定义一个View视图来显示书页,通过自定义类来读取文本内容并通过onDraw()方法把文件名、文本内容、电量信息、时间信息和已读百分比进行绘制成图片,并通过View来把绘制的图片显示出来。第一次进入阅读页面是会有显示引导页面来指导用户如何读本页面进行操作.本页面操作包括点击事件和滑动事件,点击左侧屏幕进行向上翻页,点击右侧屏幕进行向下翻页,点击屏幕中间画出菜单选项。此菜单是使用PopupWindow组件实现,菜单分上下两部分,上面的菜单有返回按钮、屏幕亮度调节按钮和添加书签按钮;下面的菜单有主题选择按钮、搜索按钮、书签按钮、目录按钮、字体大小调节按钮、翻页方式按钮、夜间模式切换按钮和退出软件按钮. 6。系统设置.系统设置模块包括阅读设置和系统设置。阅读设置中有连续阅读模式、阅读完成时自动归类、阅读休息提醒和阅读空闲退出。连续阅读模式:下次启动直接进入上次阅读的界面进行继续阅读;阅读完成时自动归类:当书籍阅读到最后一页后对此书籍自动移至“历史阅读”书架中;阅读休息提醒:设置一个时间,当用户在阅读页面停留至这个时间时会弹出个提示框来提醒用户进行休息;阅读空闲退出:设置一个时间,当用户停留在阅读界面并且为对其未进行任何操作至这个时间时,系统会自动关闭本软件。系统设置中有显示隐藏文件、使用软件密码、退出确认、使用帮助和关于。显示隐藏文件:当用户选择此设置后会在下次启动本软件时在文件浏览中显示隐藏文件;使用软件密码:用户可以对此软件进行密码设置;退出时确认:当选择此设置后,退出软件时会显示一个确认框进行退出确认,未选择此设置时则会直接退出本软件;使用帮助:显示本软件的帮助信息;关于:显示关于本软件的信息。本软件的设置信息全部使用SharedPreferences存储。 7。使用帮助。该模块通过读取帮助文件在TextView中显示,并且为TextView添加滚动条。文件中含有本软件的特点、功能介绍、操作说明等,。 8。关于.该模块的主要功能是通过一个简单的弹出窗口来显示本软件的版本信息、联系方式. 3项目功能描述 3。1软件欢迎界面模块功能描述 图4所示为欢迎界面模块,此模块作用是为了使软件的进入更连贯自然,让用户不感觉界面的出现突兀。两秒后跳入其它页面,如果有密码跳入密码验证页面如图6所示,如果是第一次启动跳入引导页面如图5所示. 图4 欢迎界面 图5 引导界面 图6 密码验证界面 关于欢迎页面启动的代码如下: new Handler()。postDelayed(new Runnable() { @Override publicvoid run() { Intent intent=null; initSaveData(); //判断是否有密码 if(share.getString(”mi_ma", ”").equals("”)){ //判断是否为第一次启动 if(share。getBoolean("first”, true)){ edit.putBoolean("first”, false); mit(); intent = new Intent(WelcomeActivity.this, GuideMain。class); }else{ intent = new Intent(WelcomeActivity。this, ActivityMain.class); } }else{ intent = new Intent(WelcomeActivity。this, GestureVerifyActivity。class); intent。putExtra(”from_activity”, 0); } startActivity(intent); finish(); } }, 2000); 关于引导界面滑动事件代码: @Override publicboolean onTouch(View v, MotionEvent event) { switch (event。getAction()) { case MotionEvent。ACTION_DOWN: { // 手指按下的X坐标 downX = event。getX(); break; } case MotionEvent。ACTION_UP: { float lastX = event。getX(); // 抬起的时候的X坐标大于按下的时候就显示上一张图片 if (lastX 〉 downX) { if (currentPosition > 0) { // 设置动画, mImageSwitcher。setInAnimation(AnimationUtils 。loadAnimation(getApplication(), R。anim。left_in)); mImageSwitcher.setOutAnimation(AnimationUtils 。loadAnimation(getApplication(), R.anim.right_out)); currentPosition——; mImageSwitcher.setImageResource( imgIds[currentPosition% imgIds。length]); setImageBackground(currentPosition); } else { Toast。makeText(getApplication(), "向右滑动”, Toast。LENGTH_SHORT)。show(); } } if (lastX 〈 downX) { if (currentPosition < imgIds.length — 1) { mImageSwitcher。setInAnimation(AnimationUtils .loadAnimation(getApplication(), R。anim。right_in)); mImageSwitcher。setOutAnimation(AnimationUtils .loadAnimation(getApplication(), R。anim。left_out)); currentPosition++; mImageSwitcher。setImageResource( imgIds[currentPosition]); setImageBackground(currentPosition); } else { Intent intent = new Intent(GuideMain.this, ActivityMain。class); startActivity(intent); finish(); } } } break; } returntrue; } 通过xml设置引导页面动画,代码如下(以向左滑动为例): <?xml version="1。0” encoding="utf-8”?> 〈set xmlns:android="http://schemas。android。com/apk/res/android"〉 <translate android:fromXDelta=”—100%p" android:toXDelta=”0” android:duration=”500"/〉 〈/set> 3。2主界面功能描述 图7所示是软件的主页面,这是一个通过TabHost标签组件来实现的一个分类管理功能。本界面的标签在屏幕的最下方,分别是文件管理、我的书架、我的设置.点击不同的标签则显示不同的界面,默认显示标签为我的书架,打开选项中会出现对应的视图.实现了将本程序关联成手机默认打开程序中,即从外部打开文本文件时选择查看方式中会出现本软件图标供用户选择以本软件打开。 图7 软件主界面 初始化选项卡代码如下: privatevoid initTabs() { myTabHost = (TabHost) findViewById(R。id。TabHost1); myTabHost。setup(this。getLocalActivityManager()); //添加文件管理选项 myTabHost.addTab(myTabHost .newTabSpec(”tab_file") .setIndicator(composeLayout("文件管理”, R。drawable。folders)) 。setContent( new Intent(this, FileExplorerActivity。class) .addFlags(Intent。FLAG_ACTIVITY_CLEAR_TOP))); //添加我的书架选项 myTabHost。addTab(myTabHost 。newTabSpec(”tab_books”) 。setIndicator(composeLayout(”我的书架”, R。drawable。books)) 。setContent(new Intent(this, BookShelf。class) 。addFlags(Intent。FLAG_ACTIVITY_CLEAR_TOP))); //添加我的设置选项 myTabHost.addTab(myTabHost .newTabSpec(”tab_setting") 。setIndicator(composeLayout("我的设置”, R.drawable。setting)) .setContent( new Intent(this, MySetting。class) 。addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); myTabHost.setCurrentTab(1); myTabHost。setOnTabChangedListener(new OnTabChangedListener()); updateTab(myTabHost); } 将程序关联成Android系统默认打开程序代码: 〈activity android:name=”com。zzu。ebookreader。ActivityMain"〉 〈intent-filter〉 〈action android:name="android。intent。action。VIEW”〉 〈/action〉 〈category android:name=”android.intent.category.DEFAULT"〉 </category〉 <data android:mimeType="text/plain”> 〈/data> 〈/intent—filter> 〈/activity〉 接收从外部传来的参数并处理的代码: Intent intent = getIntent(); String action = intent。getAction(); if (intent.ACTION_VIEW.equals(action)) { String res_path = ”"; try { res_path = URLDecoder.decode(intent.getDataString(), ”utf8"); } catch (UnsupportedEncodingException e) { e。printStackTrace(); } } 3.3书籍管理模块功能描述 图8所示是书籍管理主页面,最上面标题栏有导航按钮和书籍选择按钮。当点击导航按钮时会从左侧弹出导航栏如图9所示,并把书籍从每行显示三个调整到每行显示两个。当点击导航里的按钮时会显示子功能导航,当再点击其它按钮时,会收起前面的子功能导航,展开当前的子功能。当单击书籍选择按钮时会弹出书籍选择窗口,选择里面的书架则进入相应的书架界面,同时还可以通过左右滑动来切换书架界面.当单击书籍时会打开相应的书籍阅读界面,长按某书籍时会弹出书籍操作窗口如图10所示,书籍操作窗口中有删除阅读记录、删除阅读记录和文件、移动到历史书架、移动到收藏书籍、查看书籍详情和分享本书,不同书架中的操作项略有不同. 图8 书架效果页面 图9 导航栏页面 图10 书籍操作窗口 初始化ViewPager的核心代码如下: privatevoid InitViewPager() { mPager = (ViewPager) findViewById(R.id。vPager); listViews = new ArrayList<View〉(); Intent intent = new Intent(BookShelf.this, BookShelfActivity。class); intent。putExtra("book_shelf", MyConstant。BOOKS_RECENTLY); listViews。add(getView(”BookShelfRecently”, intent)); Intent intent2=new Intent(BookShelf。this, BookShelfActivity。class); intent2。putExtra(”book_shelf”, MyConstant.BOOKS_HISTORY); listViews。add(getView(”BookShelfHistory”, intent2)); Intent intent3=new Intent(BookShelf.this, BookShelfActivity.class); intent3。putExtra("book_shelf", MyConstant。BOOKS_COLLECT); listViews。add(getView("BookShelfCollect", intent3)); adapter = new MyPagerAdapter(listViews); mPager。setAdapter(adapter); mPager。setCurrentItem(0); mPager.setOnPageChangeListener(new MyOnPageChangeListener()); } 单击书籍跳转至阅读页面进行阅读代码如下: privatevoid goReadActivity(BookInfo tem){ if(new File(tem.bookPath)。exists()){ Intent intent = new Intent(BookShelfActivity.this, ReaderActivity。class); bundle = new Bundle(); bundle。putInt(”id”, tem。bookId); bundle。putString(”name”, tem。bookName); bundle.putString("path”, tem。bookPath); bundle.putInt(”pos”, tem。pos); bundle。putDouble(”percentage”, tem。readPercentage); intent.putExtras(bundle); startActivity(intent); }else{ booksTableOperate.delete(tem.bookId); adapter。notifyDataSetChanged(); Toast。makeText(BookShelfActivity。this, ”书籍文件不存在,移除记录~”, Toast。LENGTH_SHORT).show(); } } 书籍排序的核心代码(以按时间排序为例): SimpleDateFormat format = new SimpleDateFormat(”yyyy—MM—dd HH:mm:ss"); try { long time1 = format。parse(book1。lastRead)。getTime(); long time2 = format。parse(book2。lastRead).getTime(); if (time1 < time2) { return 1; } elseif (time1 〉 time2) { return -1; } else { return book1。bookName。compareToIgnoreCase(book2。bookName); } } catch (ParseException e) { e。printStackTrace(); } 分享本书的代码如下: Intent sendIntent = new Intent(); sendIntent。setAction(Intent。ACTION_SEND); sendIntent。putExtra(Intent。EXTRA_TEXT, ”《”+ selectBook。bookName+"》"+ ”这本书还不错,分享给大家看看!"); sendIntent.setType(”text/plain”); startActivity(sendIntent); 点击添加书籍中的快速扫描按钮,进入此界面开始扫描,通过自定义文件名过滤类来进行搜索并显示正在扫描界面,其中有扫描到的文件数目如图11所示。扫描完成后使用ListView组件显示扫描结果,最上面标题栏有返回按钮、我的书籍标题、重新扫描按钮.当长按某文件时则切换到多选模式如图12所示,最上面标题栏改变为标记全部按钮、选中的文件数目显示、加入书架按钮、取消按钮。多选模式下可以点击文件进行逐个选择,也可进行全选和取消全选操作。当用户选择是标题栏上会有对应的已选文件个数显示。选好之后点击加入书架将会把选中的文件加入最近书架中,也可以点击取消则取消多选模式。 图11 正在扫描 图12 多选模式 时时显示扫描到的文件个数部分代码: Handler handler = new Handler() { publicvoid handleMessage(Message msg) { if (msg.what != —1) { numText。setText("” + msg。what); } else { listData = listTem; ll。setVisibility(View。GONE); } super.handleMessage(msg); }; }; class UpdataBooks extends Thread { @Override publicvoid run() { handler。sendEmptyMessage(1); getAllFiles(file); handler。sendEmptyMessage(-1); } } 扫描文本文件部分代码: publicvoid getAllFiles(File root) { File files[] = root。listFiles(new MyFileFilter(false,"txt”)); if (files != null) { for (File f : files) { if (f。isDirectory()) { getAllFiles(f); } elseif ( f。length() > 1024 * 100) { Map〈String, String> tem = new HashMap〈String, String〉(); tem.put("fileName", f.getName()); tem。put("filePath”, f。getAbsolutePath()); tem。put(”fileSize”, getFileSize(f.length())); num++; handler。sendEmptyMessage(num); listTem。add(tem); isSelect.add(false); } } } } 3.4文件浏览模块功能描述 下面是文件浏览模块主页面,使用ListView组件显示文件目录,不同的文件类型显示不同的图标如图13所示。最上面标题栏有导航按钮,当点击导航按钮时会从左侧弹出导航栏如图14所示,导航栏中有标记文件按钮、分类排序按钮和添加到书架按钮,点击标记文件按钮或长按某文件或目录时则切换到多选模式,其中有多选按钮、反选按钮和取消按钮;点击分类排序则弹出子菜单,其中有按名称排序、按大小排序、按时间排序和按类型排序;点击添加到书架时如果为选择文件则自动进入多选模式让用户进行文件选择,如果用户未选择则提示“请选择书籍”,进行选择是用户可选择文件或目录,系统会自动进行扫描,把符合要求的文件添加到“最近书架”中,并弹出提示信息,其中有失败个数、已存在个数和成功个数.在多选模式下点击返回按钮或点击标记文件会取消多选模式。非多选模式下,用户点击文件时本软件会根据文件扩展名来判断打开文件方式如图15所示,如果是文本文件则直接用本软件打开,并把其添加到“最近书架”中,其它格式则调用对应的软件打开,如果是未识别的类型则提示“没有打开此文件的应用”。 图13 文件浏览页面 图14 文件浏览导航栏 图15 打开视频文件 文件路径导航实现代码: publicvoid navigationBar() { String[] strPath = null; try { strPath = currentParent.getCanonicalPath()。split("/"); } catch (IOException e1) { e1.printStackTrace(); } tvpath。removeAllViews(); for (int i = 1; i 〈 strPath。length; i++) { final FrameLayout frameLayout = new FrameLayout( FileExplorerActivity.this); final LinearLayout linyou = new LinearLayout( FileExplorerActivity。this); final TextView imageText = new TextView(FileExplorerActivity。this); imageText.setGravity(Gravity.CENTER); imageText。setTextColor(Color.BLUE); if (i > 1) { if (i == 2) { imageText。setPadding(10, 0, 20, 0); imageText。setText("存储器"); } else { imageText。setPadding(10, 0, 20, 0); imageText。setText(strPath[i]); } if (i == strPath。length — 1) { linyou.setBackgroundResource(R。drawable。rights_); } else { linyou.setBackg- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 手机 电子书 阅读器 设计 实现
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文