第二章

1. 给Application访问网络的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2. Android的权限
Android的每个权限Label保护相关的资源,在应用的manifest文件里声明的users-permission节点会在用户安装应用的时候提示给用户,用户确定之后表示这些相关的权限就授权给应用了。因此,应用程序在runtime是不做相关的检查的。在应用程序中执行一个没有授权的动作时,会抛出SecurityException的异常。
Android的权限定义在常量Manifest.permission类里。
你也可以自定义自己的权限,然后给Intent,Activity,Service和Broadcase使用。
3. Resources
Resource包括图片,国际化文字或者其他任意静态值。
Resource定义在/res目录下。
Resource可以在code里或者xml里访问。
4. Resource的特点
每个Resource都有ID
每个Resource都有一个固定的类型
Resource有特殊的存放位置和文件
5. 在/res目录下声明的Resource不仅作为你的应用程序的一部分被打包,而且也在程序里被访问。
一旦你定义一个resource在/res(除了/res/raw目录下,该目录下存放audio或者video文件等)目录下,Android平台会自动解析它,然后使用aapt工具去关联一个ID到R上。
6. 为什么会有Resources
第一,隔离了代码和外部资源,这样就能保证代码关注于应用以及整洁
第二,Resources高效并且快速的被访问到,因为XML被编译成为二进制格式
第三,Resources支持在运行时根据环境(比如语言,屏幕配置以及硬件能力等)来动态加载
7. Plurals资源(复数)
Plural是用来让系统自动处理复数字符串的一类型特殊资源,这个主要用于处理英语里名词的单数和复数用的。
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<plurals name="deal_service_new_deal">
<item quantity="one">1 new deal!</item>
<item quantity="other">
<xliff:g id="count">%d</xliff:g>
new deals!
</item>
</plurals>
</resources>
注意:
1) xmlns:xliff是指定OASIS XLIFF XML format
2) 需要定义两个item,一个one,另一个other。就是区分单数和复数的不同显示
3) 在item节点里可以使用String.format
4) 使用Resources.getQuantityString(R.plurals.deal_service_ new_deal, 1)来访问Plurals资源。(这里传入的是1,也可以传入其他数字)
8. 字符串资源放在/res/values目录下
9. Assets
如果你需要普通访问而不是被aapt处理过的文件,你就可以把文件放到/assets目录下。任何放在/assets文件夹下的文件都可以被应用访问。
10. Views and widgets
Android.view.View是所有视图的基类。分为三大类主要的Views:
1) SurfaceView:可以在其上通过drawing和graphics画出界面
2) ViewGroup:对应于各种Layout以及Group容器
3) Widget:android.widget包下的各种Android提供的控件
11. Intents和IntentFilters
Intent描述你想做什么操作,他不做任何实际的操作,仅仅描述什么事情需要去做。
IntentFilter用于声明Component处理哪些指定的Intent。
12. 发起分享Intent
Intent i = new Intent(Intent.ACTION_SEND);
i.setType(type);
i.putExtra(Intent.EXTRA_SUBJECT, "Subject:");
i.putExtra(Intent.EXTRA_TEXT,”abc”);
startActivity(Intent.createChooser(i, "Share deal ..."));

最后这一行代码里,通过Intent.createChooser(I,"Share deal …"))去创建了一个chooser,"Share deal …"会作为共享界面的Title,并且会通过Chooser挑出符合该Intent的选项,并且不会出现选择默认选项。如图所示:


将上面的代码改为下面的之后:
startActivity(i);


13. Intent分类
1) 显式的Intent(explicit),这个一般用在应用的内部,需要知道Component的具体名字以及类名。
2) 隐式的Intent(implicit),跟外部的应用联系时,使用隐式的。
隐式Intent通过action,data,type等属性被平台解析找到相应的能处理的组件。
14. Intent解析
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
这里MAIN和LAUNCHER用于声明Component能够响应Home按钮。
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
这个IntentFilter解析过程:
I. Action(SEND)
II. Category(DEFAULT),使用startActivity方法启动一个隐式的Intent的时候,都会自动为其加一个DEFAULT的category
III. Data
Android通过PackageManager去追踪有哪些注册的IntentFilter。当一个新应用安装的时候,应用里的IntentFilter就被加到PackageManager,被卸载的时候就删除。
15. Application对象
Application对象有定义完善的生命周期,可以被用来存放应用的全局状态。
Application对象会在应用程序进程创建的时候创建,不会跟Activity或者Service等Component的生命周期挂钩
Application对象继承Application类,里面有onCreate方法
在Manifest文件里使用android:name="你实现的Application类名"来给你的应用程序指定你自定制的Application对象:
<application android:icon="@drawable/ddicon"
android:label="@string/app_name"
android:name=".DealDroidApp">
16. ConnectivityManager
this.cMgr = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
ConnectivityManager是系统服务,可以通过它去检查网络状态

17.

更多相关文章

  1. android笔记
  2. Android(安卓)in Practice笔记第二章
  3. Android布局优化(四)X2C — 提升布局加载速度200%
  4. Android(安卓)Wi-Fi工作原理
  5. android布局文件中各属性所代表的意义
  6. android中线程进程模型
  7. Android(安卓)应用程序基础
  8. Android(安卓)Jni代码示例讲解
  9. Android模拟SD卡实现方法解析

随机推荐

  1. android上层得到底层数据的回调机制
  2. android开发学习积累(四)
  3. Android绘画之扭曲图像
  4. Android(安卓)GPS源码分析总结
  5. Android(安卓)ADT插件扩展补丁发布
  6. Android(安卓)Studio中引入Kotlin
  7. Android面试题目
  8. FrameLayout和RelativLayou上面覆盖View
  9. Android的常见控件(TextView、EditText、B
  10. Binder实现分析