《Android编程权威指南》第30~32以及第34章读书笔记

配置文件中的broadcast receiver
<receiver android:name="XXX">
    <intent-filter>
    </intent-filter>
</receiver>

在配置文件中完成声明后,即使应用当前并未运行,只要有匹配的broadcast intent的发来,broadcast receiver就会接收。收到intent后,onReceiver(...)就会运行,然后broadcast receiver被销毁。

发送broadcast intent

1.创建intent,intent中定义动作action;
2.sendBrocast(Intent)。

动态broadcast receiver

使用
1.在代码中注册receiver,调用registerReceiver(BroadcastReceiver,IntentFilter);
注意:IntentFilter可调用addCategory(String)、addAction(String)和addDataPath(String)等方法达到和在xml中配置intent-filter同样的效果。
2.取消注册,调用unregisterReceiver(BroadcastReceiver,IntentFilter)。
注意:这两个方法是对应的,有注册就一定要取消注册。

接收范围
一般来说,broadcast receiver是可以被系统中的任何应用监听和触发的。

将其限制在应用内部内使用:
1.receiver声明在配置文件中,在receiver标签上添加android:exported="false";
2.创建并使用私有权限。

创建并使用私有权限

创建私有权限:
在配置文件中使用<permission>标签:
1.权限名;
2.protectionLevel:确定私有权限使用方式,仅限于内部应用使用权限通常用signature。
eg:<permission android:name="权限名"
android:protectionLevel="signature"/>

使用:
1.在配置文件中声明使用私有权限,eg:<uses-permission android:name="权限名"/>;
2.发送带有权限的broadcast:调用sendBroadcast(...,权限名);
3.接收:调用registerReceiver(...,权限名,...)。

protectionLevel属性值:


protectionLevel
receiver与长时运行任务

在receiver中进行耗时操作:
1.将耗时操作交到Service中处理,通过broadcast receiver启动Service;
2.使用BroadcastReceiver.goAsync(),该方法返回一个BroadcastReceiver.PendingResult对象,使用该对象提供结果。存在不支持旧设备和不灵活的缺点。

网页浏览

1.使用隐式Intent启动系统浏览器,并在其中打开URL指向的网页;
2.使用WebView。

WebView的使用

1.布局中添加WebView控件;
2.配置WebView设置:
① 调用getSetting()获得WebSettings实例;
② 调用方法完成设置,如WebSettings.setJavaScriptEnabled(true)启用JavaScript;
3.配置WebViewClient,通过setWebViewClient(WebViewClient)去覆盖里面要实现的方法,其中shouldOverrideUrlLoading(...),返回true,表示WebView不处理传入的url,交由默认的WebViewClient也就是系统浏览器处理,返回false,表示交由WebView处理;
4.要在2.完成之后才进行,调用loadUrl(String url)加载网页(当然3.中的shouldOverrideUrlLoading(...)返回true的话,这个方法等于不起作用了)。

自定义View和触摸事件

分类

  • 简单视图:可以有复杂的内部,不包含子视图,基本都执行定制绘制;
  • 聚合视图:由一些其它视图对象组成。通常管理者子视图,但不负责执行定制绘制,图形绘制任务都交给了各个子视图。

步骤

  • 选择超类。简单视图,View就是空白画布,而聚合视图则应该选择好合适的布局类;
  • 继承选定的超类,并至少覆盖一个超类构造方法,或者在自定义的构造方法里,调用超类的构造方法;
  • 覆盖其它关键方法,以定制视图行为。

注意:在布局文件使用android.view和android.widget包之外的自定义View的时候,必须使用全路径类名,这样布局inflater才能找到自定义View来解析。

处理触摸事件
一般设置触摸事件监听器:

public void setOnTouchListener(View.OnTouchListener l)

而自定义View可以直接覆盖:

public boolean onTouchEvent(MotionEvent event)

MotionEvent可以用来描述包括位置和动作的触摸事件,MotionEvent对象调用getAction()获得动作值。通常是以下四个动作:

  • ACTION_DOWN:用户手指触摸到屏幕;
  • ACTION_MOVE:用户在屏幕上移动手指;
  • ACTION_UP:用户手指离开屏幕;
  • ACTION_CANCEL:父View拦截了触摸事件。

onDraw(...)内的图形绘制
自定义View覆盖:

protected void onDraw(Canvas canvas)
  • Canvas类具有需要的所有绘制操作。其方法可指定绘制的位置和图形,例如线条、圆形、矩形等;
  • Paint类决定如何进行绘制操作。其方法可指定绘制图形的特征,例如是否填充图形,使用什么字体进行绘制等。
使用SQLite本地数据库

Android内置了操作SQLite的Java前端,该前端的SQLiteDatabase类负责提供Cursor实例形式的结果集。

Android提供了一个SQLiteOpenHelper帮助类,里面封装了一些存储应用数据的常用数据库操作,如创建、打开以及更新数据库等。

实现SQLiteOpenHelper的子类需要覆盖两个方法:

  • onCreate(SQLiteDatabase):为新建数据库创建表结构;
  • onUpgrade(SQLiteDatabase, int, int):执行迁移代码,实现不同版本间的数据库结构升级或转换。

SQLiteOpenHelper类有两个访问SQLiteDatabase实例的方法:

  • getWritableDatabase():需要可写模式数据库时使用;
  • getReadableDatabase():需要只读模式数据库时使用。

一般来说,对于既定的SQLiteOpenHelper类实例,两者的调用,返回的SQLiteOpenHelper类实例是一样的,但在某些情况,如磁盘空间满了,可能无法获得可写数据库,只能获得只读数据库。

查询SQLiteDatabase可返回描述结果的|Cursor实例。Cursor将结果集看作一系列的数据行和数据列,但仅支持String以及基本数据类型的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,601评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,367评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,249评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,539评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,967评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,929评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,098评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,825评论 0 207
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,609评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,796评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,282评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,603评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,277评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,159评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,959评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,079评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,874评论 2 277

推荐阅读更多精彩内容