Android使用ZXing扫描二维码图片
ZXing是一个开源的二维码处理库,这个库提供了非常多的类,可以实现编码和解码操作,而且能够直接从摄像头获取图片,但是我用不到那么强大的功能,这里我只实现了通过ZXing编码文本生成图片和解码已存在的二维码图片。具体代码如下: 编码Button的OnClickListener我是这么写的:
Ingress批量提交Portal的方法
本来从寒假开始玩Ingress的,但是无奈我家那边玩的人太少,我也懒得提交,慢慢跑太麻烦,本人运动神经一直缺乏,Ingress玩家基本集中在北上广,最近到了学校就开始刷了,但是我家那边一直是大片的空白,想到回家就没得玩,所以现在就要未雨绸缪,因为提交了Portal不一定会审核通过,而且即使通过也需要几个星期,回去再提交,就那么几个星期的假期完全不够,所以现在的提交方法需要改变一下,要想办法借用别人的图片,远程提交,方法如下: 首先需要找到地理位置相对应的图片,不要随便传点什么图片就提交,肯定不会通过的,不要浪费大家的时间。 幸好Google提供了一个基于地理位置的照片分享服务,地址如下: http://www.panoramio.com/ 进去之后找到想要提交Portal的位置,需要精确一点,否则偏移量会相当大,你也不希望自己的Portal在湖里面,是吧。这里提供一个界面的演示: 然后需要用的Picasa 3这款工具,导入下载的图片,进入如图所示的界面: 注意到右边,在右边选择地理位置,会自动保存的。 最后把图片导入手机,选择分享到Ingress。然后就会受到邮件了,等待吧。 王锐 http://www.shunix.com
Galaxy Nexus刷原厂镜像
这篇post可以教你把Galaxy Nexus刷回原厂镜像,首先先要说明一下,我推荐大家在Linux下刷机,这样可以免去装驱动的环节,如果你使用Windows,那么请自行安装驱动,这里通常是最麻烦的一个环节,而且需要安装两个驱动,一个是待机状态下的Galaxy Nexus驱动,一个是fastboot模式下的Galaxy Nexus驱动。 首先需要下载镜像文件: https://developers.google.com/android/nexus/image 下载下来是一个tgz文件,解压出来(Windows下使用7-zip,不要使用WinRAR),把里面的image.zip也解压,这样一来你一共会有6个img文件(LTE版本有7个)确认这些img文件在同一文件夹下。然后确认fastboot和adb已经安装,并且在PATH变量中。重启进入bootloader模式(也就是fastboot模式),执行:
SimpleOnGestureListener.onScroll方法无法触发解决方法
最近在写一个处理Android手势操作的问题,本来这是一个很简单的问题,使用SimpleOnGestureListener接口就能解决问题,但是因为之前没有写过,所以出现了一些小错误,这里写出来,希望能对大家有帮助。 要处理手势操作,通常都是这样做的,先定义一个类实现SimpleOnGestureListener接口(这个接口已经足以处理大部分手势操作),重写其中的方法,比如我这里重写了onScroll()方法,用来处理滑动时间,另外还有几个事件,比较简单,不一一解释,具体的翻SDK,这里需要解释另外两个方法,第一个是onDown(),只要手指触碰到屏幕,就会触发这个方法,还有一个是onFling(),这个方法我也没发现和onScroll()有什么太大的区别,但是如果滑动的速度不同,触发的方法是不同的,onFling()可以实现更细致的触摸处理。 然后我们要自定义一个View,在这个View里面使用一个GestureDetector,在GestureDetector里面绑定我们自己实现的监听器,并且要在View的onTouch方法里面触发事件。 好了,前置知识差不多了,讲讲我碰到的问题吧。我写了这样一段测试程序,但是无论如何我只能在LogCat里面得到onDown()方法的输出,无法获取onScroll()方法的输出,这个方法根本没有被触发。解决方法如下: 在新建自定义View对象的时候,使用如下语句: myView.setLongClickable(true); 现在滑动事件应该就能被触发了。 王锐 http://www.shunix.com
Arch64 使用32位应用程序
Archlinux 64位版本不像其它的Linux发行版一样,可以直接运行32位应用程序,需要安装一些库才能运行32位应用程序。当在Arch64上运行程序如果出现如下提示,那么说明,缺少32位的库。这里以adb为例(adb可执行文件在当前目录下): bash: ./adb: No such file or directory 明明存在的文件,却提示找不到,看了官方的wiki之后,找到了解决方案,首先打开/etc/pacman.conf,取消[multilib][multilib-testing]的注释,执行如下命令: sudo pacman -S lib32-glibc sudo pacman -S lib32-libstdc++5 然后再次运行./adb,这次的提示是: ./adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory 看来官方wiki也不靠谱啊,这里还少了一个ncurses的库文件,那么就安装吧 sudo pacman -S lib32-ncurses 再次运行./adb,一切正常。 王锐 http://www.shunix.com
Android颜色配置xml
这是开发过程中找到的一份xml,里面涵盖了几乎所有开发中可能用到的颜色,直接把下面的文件保存成color.xml放在values目录里面就行了。
Android Fragments基础教程
最近被Android的布局问题搞得比较头大,在Android官网找到了一篇关于Fragments的教程,本文就以官方的源码为例子,解析一下Fragments的基本使用。Fragments是在Android 3.0(API Level 11)之后引入的,能够动态调整UI的布局,可以生成更灵活的用户界面。不过我个人感觉还是比较复杂的。 官方给出的源码主要有如下几个文件: ArticleFragement.java,这个类用于生成每一篇文章的内容,继承自Fragment HeadlinesFragment.java,这个类用于生成一个导航菜单,继承自ListFragment MainActivity.java,这个类就是主要的Activity,继承自FragmentActivity,当然,如果你的应用程序支持的最低SDK版本就是11,那 么你完全可以使用一般的Activity Ipsum.java,这个类保存了两个字符串数组,用于存储文字内容 res/layout/article_view.xml,这个文件保存了ArticleFragment使用的布局 res/layout/news_articles.xml,这个文件保存了在小尺寸屏幕的情况下,整个Activity使用的布局 res/layout-large/news_articles.xml,这个文件保存了在大尺寸屏幕下,整个Activity要使用的布局 先贴上三个布局文件: res/layout/article_view.xml
Android中BroadcastReceiver用法
BroadcastReceiver是Android系统的4大组件之一,用于接收广播信息,我这里只讲一些基本用法,BroadcastReceiver拥有丰富的方法,具体可以参考官方文档。 首先是BroadcastReceiver的实现,你可以直接new一个BroadcastReceiver对象,覆写其中的onReceive()方法,也可以自己定义一个继承自BroadcastReceiver的子类,然后实现其中的onReceive()方法。 然后是关于BroadcastReceiver的注册问题,有两种方式,一种是在AndroidManifest.xml文件中注册的静态注册方法,第二种是在代码中动态注册,比如我要监听短信的接收,那么我应该在AndroidManifest.xml中进行如下声明:(假定我的监听器类为SMSReceiver) <receiver android:name = ".SMSReceiver"> <intent -filter> <action android:name ="android.provider.Telephony.SMS_RECEIVED"></action> </intent> </receiver>
Android中SQLite的使用
SQLite是一个轻量级的数据库,但是却提供了相对完整的功能,可以支持最大2TB的数据(显然移动设备用不到的),所以Android和iOS都内置了SQLite数据库的操作方法。 这里我提供了Android下访问SQLite数据库的方法,首先你需要创建自己的一个类,这个类继承自SQLiteOpenHelper,必须必须实现SQLiteOpenHelper构造函数形式的构造函数,还有两个回调方法(在SQLiteOpenHelper类中被声明为abstract):onCreate(SQLiteDatabase arg0)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),其中第一个方法在创建数据库的时候被调用,第二个方法在数据库version值增加的时候被调用(version值只能增加,如果尝试减少会抛出异常)。SQLiteOpenHelper类构造函数如下: SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) 第一个参数是当前的Activity,第二个参数是数据库名,第三个参数通常传递null,最后一个参数为version值。 下面直接上代码,首先是DatabaseHelper.java,继承自SQLiteOpenHelper类
Android传感器使用方法
对Android编程最让人兴奋的地方就是Android对各种传感器的支持,你可以控制各种各样的传感器,达到自己想要的效果,而且Android对各种传感器提供了一个统一的抽象,学会了使用一种传感器,其它的传感器就触类旁通了。这里以我今天写的温传感器为例,解析一下Android平台上各种传感器的使用方法(话说我唯一写了一个温度传感器,偏偏Galaxy Nexus唯一没有的就是温度传感器啊,我去) 代码如下: package com.shunix.sensordemo; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.view.Menu; import android.widget.TextView; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; public class MainActivity extends Activity { private TextView textView; private SensorManager sensorManager; //Create a SensorEventListener private SensorEventListener sensorEventListener = new SensorEventListener() { @SuppressWarnings("deprecation") //Do what you need to do here public void [...]