Android 单字阅读
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 单字阅读的更多相关文章
- android 资讯阅读器
最近找申请到了一个不错的接口 , 非常适合拿来写一个资讯类的app. 现在着手写,随写随更.也算是抛砖引玉.烂尾请勿喷.╭(╯^╰)╮ android 资讯阅读器 第一阶段目标样式(滑动切换标签 , ...
- Android MuPDF 阅读PDF文件
MuPDF是一款轻量级的开源软件,可以用来阅读PDF文件.下载完源代码以后,想要运行成功,除了Android SDK之外,还需要Android NDK环境,因此有点麻烦. 但是一旦安装完必须的环境以后 ...
- Android拓展系列(10)--使用Android Studio阅读整个Android源码
之前一直在windows下用source insight阅读android源码,效果非常好.后来远程异地服务器,网络限制,一直用ssh + vim,现在主要还是以这种方式.最近发现一个不错的东西(早就 ...
- [前言] 实现一个Android电子书阅读APP
大家好,我是小方,我将在接下来的几篇文章中从零实现一个网络小说阅读器,从安卓编程最基础的部分讲起,直至成功完成我们的应用,从新建一个项目开始,不断添加新的代码,添加新的界面,循序渐进,涵盖所有我们需要 ...
- 【新建项目&使用viewPager】实现一个Android电子书阅读APP
本章结尾处已放出应用DEMO,已经实现所有本文及后续文章所述全部功能,大家可以先下载下来玩玩看,欢迎在本文下方评论,小方很需要鼓励支持!!! 新建一个项目 呼-我们即将步入安卓开发之旅了,首先要新建一 ...
- 【RecyclerView与Glide】实现一个Android电子书阅读APP
http://www.cnblogs.com/xfangs/ 欢迎在本文下方评论,小方很需要鼓励支持!!! 本系列教程仅供学习交流 小说阅读器最终实现效果见 第一篇博文 前言 在上一篇文章中,我们实现 ...
- android小说阅读源码、bilibili源码、MVP新闻源码等
Android精选源码 一款基于 MVP+RxJava2+Retrofit2 的应用--熊猫眼 android 五子棋源码分享 android实现全国地图点击效果 android实现立体图案绘制的代码 ...
- android 资讯阅读器(二)
接着上次的博客,上次移植完了tab以后整个app的框架就算是定下来了. 本次目标: 1.数据的获取与展示(ListView) 2.官方的下拉刷新效果(SwipeRefreshLayout) 3.数据接 ...
- 50 Android Hacks阅读笔记
Hack 1.善用weightSum和layout_weight. 问题提出:尝试做一个button的宽度是父View的一半的效果. 关键词:weightSum = 1 , layout_weight ...
随机推荐
- 用Delphi获取当前系统时间
在开发应用程序时往往需要获取当前系统时间.尽管Y2K似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题. 在<融会贯通--Delphi4.0实战技巧>(以下简称“该书” ...
- leetcode 解题 String to Integer (atoi)(C&python)
//此题是easy题,比较简单,主要困难在考虑全输入的各种情况://1.开始的时候有空格等空白字符//2.开头有加减号//3.溢出(第一次写就是没有考虑到这个情况) //C代码int myAtoi(c ...
- puppet中anchor的作用
anchor出现背景:Puppet Forge是一个网上的module仓库,许多人写的puppet module会传上去,供大家下载使用.大家下载了一个module可以直接使用,不应该再来改动里面ma ...
- 3.bit-map
适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下 基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码 扩展:bloom filter可以看做是对bi ...
- WPF从入门到放弃系列第二章 XAML
本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...
- CoreBluetooth - 中心模式
BLE中心模式流程-coding BLE中心模式流程 - 1.建立中心角色 - 2.扫描外设(Discover Peripheral) - 3.连接外设(Connect Peripheral) - 4 ...
- C语言杂记
strcmp函数是可以和int数字进行比较的 , , , }; puts(ch); if (strcmp("AAA", ch)) { printf("real?true! ...
- CentOS搭建OpenVPN服务(简易版)
OpenVPN服务端配置 1. 安装OpenVPN软件包 默认的Centos软件源里面没有OpenVPN的软件包,我们可以添加rpmforge的repo,从而实现yum安装openvpn 针对Cent ...
- <django中render_to_response的可选参数和使用方法>
在django官方文档中有比较详细的介绍,在此我按照自己的理解适当的阐述一下: return render_to_response(①'my_template.html', ②my_data_dict ...
- [转载]MongoDB学习 (五):查询操作符(Query Operators).1st
本文地址:http://www.cnblogs.com/egger/archive/2013/05/04/3059374.html 欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 查询操作符(Quer ...