Monthly Archives: February 2012

Android Push Notification—-C2DM

一.基础知识 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如《地震及时通》就需要及时获取服务器上最新的地震信息。要获取服务器上不定时更新的信息一般来说有两种方法,第一种是客户端使用Pull(拉)的方式,隔一段时间就去服务器上获取信息,看是否有更新的信息出现。第二种就是服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。 虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push is better than pull。因为Pull方式更费客户端的网络流量,更主要的是费电量。 Android从2.2版本开始增加了Cloud to Device Messaging(C2DM)框架,在系统中支持了Push功能,基于Android平台使用Push功能更加简单了。虽然C2DM目前还处在实验室阶段,不过小规模的使用应该没问题 下面我们就来体验一下Android的C2DM功能。 二.C2DM框架 使用Android的C2DM功能有几个要求: 1.       需要Android2.2及以上的系统版本。 2.       使用C2DM功能的Android设备上需要设置好Google的账户。 3.       需要在这里注册使用C2DM功能的用户邮箱账号(最好为C2DM单独注册一个Gmail邮箱账号)。 我们接下来C2DM的一个完整过程,这里借用一下Google官方推出的Chrome To Phone过程图来说明下。 图1 C2DM操作过程图 要使用C2DM来进行Push操作,基本上要使用以下6个步骤:          (1)注册:Android设备把使用C2DM功能的用户账户(比如android.c2dm.demo@gmail.com)和App名称发送给C2DM服务器。          (2)C2DM服务器会返回一个registration_id值给Android设备,设备需要保存这个registration_id值。          (3)Android设备把获得的registration_id和C2DM功能的用户账户(android.c2dm.demo@gmail.com)发送给自己的服务器,不过一般用户账户信息因为和服务器确定好的,所以不必发送。 这样Android设备就完成了C2DM功能的注册过程,接下来就可以接收C2DM服务器Push过来的消息了。          (4)服务器获得数据。这里图中的例子Chrome To Phone,服务器接收到Chrome浏览器发送的数据。数据也可以是服务器本地产生的。这里的服务器是Google AppEngine(很好的一项服务,可惜在国内被屏了),要换成自己的服务器。服务器还要获取注册使用C2DM功能的用户账户(android.c2dm.demo@gmail.com)的ClientLogin权限Auth。          (5)服务器把要发送的数据和registration_id一起,并且头部带上获取的Auth,使用POST的方式发送给C2DM服务器。 … Continue reading

Posted in Android | Leave a comment

Android file IO

源地址:http://blog.csdn.net/ajq1989/article/details/6899343  Android平台下的数据存储主要包括文件的流读取,轻量级数据库SQLite,ContentProvider和Preference             当App被安装后.其所在的安装包中会有一个相应的文件夹用于存放自己的数据.只有应用程序自己本身才对这个文件夹有写入权限,路径是/data/data/APP包名/.下面是使用文件I/O方法直接往手机中存储数据.主要使用了FileInputStream和FileOutputStream这个两个类. public class UIDataActivity extends Activity {     public static final String ENCODING = “UTF-8”;     String fileName=”test.txt”;     String message = “Android数据存储I/O例子 “;     TextView textView;     /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         /*          * 本示例是应用程序在私有数据文件夹下创建一个文件并读取其中的数据显示在TextView上          */         writeFileData(fileName,message);         String result = readFileData(fileName);         textView = (TextView)findViewById(R.id.tv);         textView.setText(result);     }     public void writeFileData(String fileName,String message){         //使用FileOutputStream对象如果文件不存在或者不可以写入时.会抛出FileNotFoundException异常         try {             FileOutputStream stream = openFileOutput(fileName, MODE_PRIVATE);             byte[] bytes = message.getBytes();             stream.write(bytes);             stream.close();         } catch (FileNotFoundException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     }     public String readFileData(String fileName){         String result =””;         try { … Continue reading

Posted in Android | Leave a comment

Linux Top 详解

源地址:http://www.flatws.cn/article/program/linux/2011-05-06/24407.html top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。 top – 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48 Tasks: 29 total,   1 running, 28 sleeping,   0 stopped,   0 zombie Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si … Continue reading

Posted in Android | Leave a comment

调节屏幕亮度

源地址:http://www.itivy.com/android/archive/2011/7/3/android-adjust-screen-brightness.html Android的屏幕亮度好像在2.1+的时候提供了自动调节的功能,所以,如果当开启自动调节功能的时候, 我们进行调节好像是没有一点作用的,这点让我很是无语,结果只有进行判断,看是否开启了屏幕亮度的自动调节功能。   1 2 3 4 5 6 7 8 9 10 11 12 13 /**  * 判断是否开启了自动亮度调节  */ public static boolean isAutoBrightness(ContentResolver aContentResolver) {     boolean automicBrightness = false;     try {         automicBrightness = Settings.System.getInt(aContentResolver,                 Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;     } … Continue reading

Posted in Android | Leave a comment

Android 程序一直运行

源地址:http://www.eoeandroid.com/thread-78312-1-1.html 在正常情况下,Android系统会让程序和服务进入休眠状态以节约电量使用。然而在开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠。 Android中设置禁止休眠有两种方式: 1. 在View中设置FLAG_KEEP_SCREEN_ON。 实现上可以在代码中设置,也可以在XML文件中设置。 代码如下所示: java: getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 或者配置文件对该View设置: java: <LinearLayout android:layout_width=”fill_parent” a ndroid:layout_height=”fill_parent” android:keepScreenOn=”true” android:orientation=”vertical” xmlns:android=”http://schemas.android.com/apk/res/android”&gt; 这样可以保持当前View所在的Activity一直在活动状态运行,而且屏幕是高亮的。非常耗电!! 2.通过PowerManager来精细控制。 首先在Manifest.xml文件里面用user-permission声明 java: <uses-permission android:name=”android.permission.WAKE_LOCK”/> <uses-permission android:name=”android.permission.DEVICE_POWER” /> 之后通过PowerManager服务来获取电量控制锁: java: private void acquireWakeLock() { if (wakeLock == null) { PowerManager … Continue reading

Posted in Android | Leave a comment