Android阅读器
做底层的或者游戏待遇会很高。NDK
内置底层修改
Android-sdk-windows\platform-tools\adb.exe
这里的adb工具可以用于安装android应用程序(*.apk)
D:\cd-reader\adb install myreader.apk
这里有三个阅读器的应用程序:
MyBook.apk
MyReader.apk
GoBook14.apk
将文本文件存入sdcard中, xx.txt push入File Explorer中的sdcard
MyReader.apk
1 选择图书
选项菜单---》添加图书按钮---》添加图书表单—》选择图书路径
2 查看图书目录
继续阅读
乱码
设置 : 设置每页字数 设置字号
第一页
上一页
下一页
编辑图书
删除图书
设置密码
MyBook.apk
图书导入
批量导入 自动扫描 返回书架
分享
意见反馈
帮助
检查更新
退出
图书目录—加载图书---
(
白天模式---
夜晚模式---
图片模式---
粉红模式---
进度控制---进度导航条
)
GoBook14.apk
1 选择文件夹
自动扫描(默认目录导入)
批量导入
返回书架
2 选择文件
全选
导入
取消导入
3 书架展示图书
4 读取图书
改变文字大小
改变进度
背景色
阅读背景
翻页方式
如果真的是9月底发工资,我得到了什么白干了1个月。就算我等到10月底,我还是白干1个月
那我要做的是:1 赚的是时间,晚上的学习时间。2 面试机会
9月:快递+晚上项目视频
10月:面试---》关外软件公司或者包住软件公司
11月:稳定发展,获取工资。
12月:转正后,想办法借贷1.5万用来完成mba的学习2.25万
对MyReader.apk进行开发设计
主页:
main.xml
显示表头的信息
main_item.xml 显示图书目录
ListView(sqlite)
_ID
书名:
作者
密码
文件路径
简介
阅读时间
文件总的大小
阅读文件进度:字节
TableLayout
file.xml
文件路径,按钮
file_item.xml
ListView
图标,文件名称
点击事件:File
长按3秒以上弹出上下文菜单
必须传入要是图书实体的_ID
感悟很重要,用积木式的项目进行开发。产品框架+功能组件!
第一, 以产品为核心
第二, 对产品进行组件式的扩展!
第三, 如果我能够坚持,产品和组件的模式,一年,十年之后,我将会收获很多的。
1创建andriord project
2创建 mainActivity
package cd.itcast.read.ui;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
3 写添加图书实体 book.java
package cd.itcast.read.domain;
import java.util.Date;
public class Book {
//_ID
privateint _id;
//书名:
privateString name;
//作者
privateString author;
//密码
privateString password;
//文件路径
privateString filePath;
//简介
privateString descs;
//最后阅读时间
privateDate lastReadTime;
//文件总的大小
privatelong fileSize;
//阅读文件进度:字节
privateint start;
publicint get_id() {
return_id;
}
publicvoid set_id(int _id) {
this._id= _id;
}
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name= name;
}
publicString getAuthor() {
returnauthor;
}
publicvoid setAuthor(String author) {
this.author= author;
}
publicString getPassword() {
returnpassword;
}
publicvoid setPassword(String password) {
this.password= password;
}
publicString getFilePath() {
returnfilePath;
}
publicvoid setFilePath(String filePath) {
this.filePath= filePath;
}
publicString getDescs() {
returndescs;
}
publicvoid setDescs(String descs) {
this.descs= descs;
}
publicDate getLastReadTime() {
returnlastReadTime;
}
publicvoid setLastReadTime(Date lastReadTime) {
this.lastReadTime= lastReadTime;
}
publiclong getFileSize() {
returnfileSize;
}
publicvoid setFileSize(long fileSize) {
this.fileSize= fileSize;
}
publicint getStart() {
returnstart;
}
publicvoid setStart(int start) {
this.start= start;
}
}
4创建bookmanager对图书进行增删查改
package cd.itcast.read.manager;
import java.util.List;
import android.content.Context;
importandroid.database.sqlite.SQLiteDatabase;
import cd.itcast.read.domain.Book;
import cd.itcast.read.util.DatabaseHelper;
public class BookManager {
privateDatabaseHelper helper;
publicBookManager(Context context) {
helper= new DatabaseHelper(context);
}
publicvoid save(Book book) {
SQLiteDatabasewrite = helper.getWritableDatabase();
//返回是null
//write.execSQL(sql)
//返回是long,插入的主键
//定义出来java本地方法,通过java native interface调用c/c++方法通过andriod
//ndk打包成一个.so文件(windows,.dll动态链接库)来实现
//private final native long native_executeInsert();
//write.insert(table, nullColumnHack,values)
}
publicvoid update(Book book) {
}
publicvoid detele(int id) {
}
publicBook get(int id) {
returnnull;
}
publicList<Book> getAll() {
returnnull;
}
}
5 BookManagerTest类对BookManager测试
package cd.itcast.read.manager;
import android.test.AndroidTestCase;
public class BookManagerTest extendsAndroidTestCase {
privateBookManager bookManager;
//错误的写法,
//public BookManagerTest() {
//bookManager = new BookManager(getContext());
//}
@Override
protectedvoid setUp() throws Exception {
bookManager= new BookManager(getContext());
}
publicvoid testSave() {
//fail("Notyet implemented");
}
publicvoid testUpdate() {
fail("Notyet implemented");
}
publicvoid testDetele() {
fail("Notyet implemented");
}
publicvoid testGet() {
fail("Notyet implemented");
}
publicvoid testGetAll() {
fail("Notyet implemented");
}
}
======================================================================================================================================================
要成功测试则需要AndroidManifest.xml进行修改
<?xml version="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="cd.itcast.read.ui"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-libraryandroid:name="android.test.runner"/>
</application>
<!-- 注意修改包名 -->
<instrumentationandroid:name="android.test.InstrumentationTestRunner"
android:targetPackage="cd.itcast.read.ui"android:label="MyTest" />
</manifest>
6需要写一个工具类DatabaseHelper对sqlite进行操作
package cd.itcast.read.util;
import android.content.Context;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extendsSQLiteOpenHelper {
privatestatic final String DB_NAME = "read.db";
privatestatic final int DB_VERSION = 1;
publicDatabaseHelper(Context context) {
super(context,DB_NAME, null, DB_VERSION);
}
//建表,onCreate第一次创建数据库时候可以调用。
@Override
publicvoid onCreate(SQLiteDatabase db) {
}
//当应用程序升级的时间,可能表的信息的就改变:alert table
@Override
publicvoid onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}