给苦逼课代表的福利–使用二维码和Android手机统计作业数量
最近英语老师不知道收了什么刺激,让我每天收英语作业时要统计没交作业的人,更可恶的是,老师那个名单不知道是用什么野生的规则排的序,名字的顺序完全是乱的,以至于我每次统计作业都需要10分钟+…..
由于我对Android开发一无所知,所以也就无法开发普通的java应用,于是我选择使用一个shell脚本,读取二维码扫描器(我用的是一个开源项目zxing)扫描的历史记录,然后与一个包含全班学号的文本文件进行比对,然后输出没有被扫描到的学号。这个方法虽然有效,但是十分简单粗暴,由于需要从/data分区中读取其他应用的数据,所以需要root权限。
一共需要3个脚本,其实本来一个就够了,但为了方便修改就分成了3个。
代码如下:
运行w.sh (需要su权限)
#w.sh echo "================================" echo "clear history? y/n [enter]" read yn if [ "${yn}" = "y" ];then //如果输入y则删除历史记录文件 rm /data/data/com.google.zxing.client.android/databases/barcode_scanner_history.db echo "history cleared." fi am start -n com.google.zxing.client.android/com.google.zxing.client.android.CaptureActivity //启动zxing的capture activity echo "press enter to continue .." read -n 1 sqlite3 /data/data/com.google.zxing.client.android/databases/barcode_scanner_history.db<1.sql 调用sql脚本,将sql数据库的某个表输出到文本0.txt export d=$(date +"%Y%m%d") date>>/sdcard/hw/log/$d.txt grep -v -f 0.txt list.txt> /sdcard/hw/inp.txt 将0.txt与list.txt (包含全班学号)进行比对,并将0中不包含但list中包含的行输出并重定向至inp.txt sh o.sh //执行o.sh cat outp.txt //在屏幕上打印outp.txt并重定向 cat outp.txt >>/sdcard/hw/log/$d.txt echo "result saved to $d.txt"
#o.sh sed -n 's/0000/0000aaaa/gp' inp.txt > outp.txt (将学号替换为学号+名字)(为了省事我使用的是很笨的办法,代码还可以大幅度优化) sed -n 's/1111/1111bbbb/gp' inp.txt >> outp.txt
1.sql .output /sdcard/hw/0.txt select text from history; .exit
这篇文章只是提供一个思路和基本的解决方案,脚本目前很不完善,仍然可以大幅度优化。
另外这篇文章写得比较仓促,很多地方没有说清楚,等有时间我会再完善。