package com.desmand.screencapture;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class MainActivity extends Activity implements View.OnClickListener, Runnable { private static String TAG = "ScreenCapture";
Thread showTextThread;
Button start_service_btn;
private TextView show_text_tv;
private String readerString;
private String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Panasonic/";
private String fileName = file_path + "test.txt";
private char testChar; private boolean isRun; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null); startService(new Intent(this, ScreenCaptureService.class));
this.finish(); // super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); start_service_btn = (Button) findViewById(R.id.start_service_btn);
start_service_btn.setOnClickListener(this);
show_text_tv = (TextView) findViewById(R.id.show_text_tv); showTextThread = new Thread(this); File filePath = new File(file_path);
if (!filePath.exists()) {
Log.i(TAG, "----------ERROR----------");
}
} Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
show_text_tv.setText(String.valueOf(testChar));
super.handleMessage(msg);
}
}; @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start_service_btn:
if (showTextThread.isAlive()) {
isRun = false;
showTextThread.interrupt();
}
showTextThread = new Thread(this);
showTextThread.start();
isRun = true; // startService(new Intent(this, ScreenCaptureService.class));
// this.finish();
break;
default:
break;
}
} @Override
public void run() {
// List<String> lines = new ArrayList<>();
// BufferedReader br = null;
// try {
// File file = new File(fileName);
// InputStream inputStream = new FileInputStream(file);
// Reader reader = new InputStreamReader(inputStream, "GBK");
// br = new BufferedReader(reader);
// } catch (UnsupportedEncodingException | FileNotFoundException e) {
// e.printStackTrace();
// }
//
// try {
// while ((readerString = br.readLine()) != null) {
// lines.add(readerString);
// myHandler.sendEmptyMessage(0);
// Log.i(TAG, readerString);
// Thread.sleep(200);
// }
// br.close();
// } catch (IOException | InterruptedException e) {
// e.printStackTrace();
// } File file = new File(fileName);
BufferedReader reader;
String text = "";
try {
FileInputStream fis = new FileInputStream(file);
BufferedInputStream in = new BufferedInputStream(fis);
in.mark(4);
byte[] first3bytes = new byte[3];
in.read(first3bytes);//找到文档的前三个字节并自动判断文档类型。
in.reset();
if (first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB && first3bytes[2] == (byte) 0xBF) {// utf-8
reader = new BufferedReader(new InputStreamReader(in, "utf-8"));
} else if (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFE) {
reader = new BufferedReader(new InputStreamReader(in, "unicode"));
} else if (first3bytes[0] == (byte) 0xFE && first3bytes[1] == (byte) 0xFF) {
reader = new BufferedReader(new InputStreamReader(in, "utf-16be"));
} else if (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFF) {
reader = new BufferedReader(new InputStreamReader(in, "utf-16le"));
} else {
reader = new BufferedReader(new InputStreamReader(in, "GBK"));
} readerString = reader.readLine();
while (readerString != null) {
if (isRun) {
for (int i = 0; i < readerString.length(); i++) {// 遍历字符串每一个字符 // 使用正则表达式判断字符是否属于汉字编码
Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m = p.matcher(readerString);
if (m.find()) {// 如果是汉字
testChar = readerString.charAt(i);
Log.i(TAG, "testChar: " + testChar);
myHandler.sendEmptyMessage(0);
} Thread.sleep(300); // String[] splitStr = readerString.split("[\\s,.;。,;]");
// for (String str : splitStr) {
// if (!str.trim().equals("")) {
// testChar = str.trim();
// Log.i(TAG, "testChar: " + testChar);
// myHandler.sendEmptyMessage(0);
// Thread.sleep(400);
// }
// } // StringBuffer english = new StringBuffer();
// String regex = "[^\u4e00-\u9fa5。,?”“《》:!——-、]";
// Pattern pattern = Pattern.compile(regex);
// Matcher matcher = pattern.matcher(readerString);
// while (matcher.find()) {
// testChar = null;
// english.append(matcher.group(1));
// testChar = english.toString();
// Log.i(TAG, "testChar: " + testChar);
// myHandler.sendEmptyMessage(0);
// } }
}
readerString = reader.readLine();
}
reader.close();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
} @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
isRun = false;
this.finish();
}
return super.onKeyDown(keyCode, event);
} @Override
protected void onDestroy() {
super.onDestroy();
isRun = false;
Toast.makeText(getApplicationContext(), "MainActivity onDestroy", Toast.LENGTH_SHORT).show();
} }

Android 单字阅读的更多相关文章

  1. android 资讯阅读器

    最近找申请到了一个不错的接口 , 非常适合拿来写一个资讯类的app. 现在着手写,随写随更.也算是抛砖引玉.烂尾请勿喷.╭(╯^╰)╮ android 资讯阅读器 第一阶段目标样式(滑动切换标签 , ...

  2. Android MuPDF 阅读PDF文件

    MuPDF是一款轻量级的开源软件,可以用来阅读PDF文件.下载完源代码以后,想要运行成功,除了Android SDK之外,还需要Android NDK环境,因此有点麻烦. 但是一旦安装完必须的环境以后 ...

  3. Android拓展系列(10)--使用Android Studio阅读整个Android源码

    之前一直在windows下用source insight阅读android源码,效果非常好.后来远程异地服务器,网络限制,一直用ssh + vim,现在主要还是以这种方式.最近发现一个不错的东西(早就 ...

  4. [前言] 实现一个Android电子书阅读APP

    大家好,我是小方,我将在接下来的几篇文章中从零实现一个网络小说阅读器,从安卓编程最基础的部分讲起,直至成功完成我们的应用,从新建一个项目开始,不断添加新的代码,添加新的界面,循序渐进,涵盖所有我们需要 ...

  5. 【新建项目&使用viewPager】实现一个Android电子书阅读APP

    本章结尾处已放出应用DEMO,已经实现所有本文及后续文章所述全部功能,大家可以先下载下来玩玩看,欢迎在本文下方评论,小方很需要鼓励支持!!! 新建一个项目 呼-我们即将步入安卓开发之旅了,首先要新建一 ...

  6. 【RecyclerView与Glide】实现一个Android电子书阅读APP

    http://www.cnblogs.com/xfangs/ 欢迎在本文下方评论,小方很需要鼓励支持!!! 本系列教程仅供学习交流 小说阅读器最终实现效果见 第一篇博文 前言 在上一篇文章中,我们实现 ...

  7. android小说阅读源码、bilibili源码、MVP新闻源码等

    Android精选源码 一款基于 MVP+RxJava2+Retrofit2 的应用--熊猫眼 android 五子棋源码分享 android实现全国地图点击效果 android实现立体图案绘制的代码 ...

  8. android 资讯阅读器(二)

    接着上次的博客,上次移植完了tab以后整个app的框架就算是定下来了. 本次目标: 1.数据的获取与展示(ListView) 2.官方的下拉刷新效果(SwipeRefreshLayout) 3.数据接 ...

  9. 50 Android Hacks阅读笔记

    Hack 1.善用weightSum和layout_weight. 问题提出:尝试做一个button的宽度是父View的一半的效果. 关键词:weightSum = 1 , layout_weight ...

随机推荐

  1. Rsync+Inotify-tools实现数据实时同步

    inotify是一种强大的,细粒度的,异步文件系统时间监控机制,它可以替代crond实现与rsync的触发式文件同步,从而监控文件系统中添加,删除,修改,移动等细粒事件,从LINUX 2.6.13起, ...

  2. JAVA技术体系发展路线

    JAVA技术体系 1.1 Java程序员 ·高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变参数.可变返回类型.增强循环.静态导入 ·核心编程 IO.多线程.实体类.集合类.正则表达式.XM ...

  3. Oracle数据库插入图片和读取图片

    package com.basicSql.scroll_page; import java.io.File; import java.io.FileInputStream; import java.i ...

  4. iOSApp -Monkey测试

    IOS操作系统不像Android系统那么方便,各种限制也比较多,目前我的建议还是直接在模拟器上执行monkey测试.如果需要在真机上面执行,可以参考文档: http://testerhome.com/ ...

  5. 线上问题:如何定位解决CPU高占有率

    (原文转自:http://www.blogjava.net/hankchen) 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题. 根据top命令,发现PID为28555的Java进程占用 ...

  6. Logback 将日志分级别打印

    最近项目中用到了logback 记录日志,  关于为啥使用logback 请百度一下:  logback与Log4J的区别 好了,废话不多说,直奔主题, 研究了好久,终于将日志按级别将日志分文件打印出 ...

  7. require backbone 移动

    http://www.gafish.net/archives/1422 http://www.w3ctech.com/2012/mobile/schedule http://cavenfeng.ite ...

  8. php foreach的使用注意

    众所周知,foreach用于对数组的遍历,但是,在foreach($arr as $value)中,$value只是原值的一个副本,因此如果在foreach里进行该数值的修改,是不会影响到源数组的. ...

  9. cocos2d-x mac or windows eclipse android ------ Eclipse工程里面还会有许多警告

    由于公司的游戏项目比较特殊,  coco2d-x 的  ios  和  android  的游戏 代码 没有采用 共享目录的开发方式.所以android 内的 c++ 游戏代码全部放在 jni 下, ...

  10. M-JPEG和MPEG-4的区别 M-JPEG VS MPEG

    http://blog.sina.com.cn/s/blog_4b357b300100gre9.html M-JPEG VS MPEG http://blog.csdn.net/bluesky_sun ...