setContentView()
方法即可。Service 与 Activity 的地位是并列的,它也代表一个单独的 Android 组件。Service 与 Activity 的区别在于:Service 通常位于后台运行,它一般不需要与用户交互,因此 Service 组件没有图形用户界面。
与 Activity 组件需要继承 Activity 基类相似,Service 组件需要继承 Service 基类。一个 Service 组件被运行起来之后,它将拥有自己独立的生命周期,Service 组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。
顾名思义,BroadcastReceiver 代表广播消息接收器。从代码实现角度来看,BroadcastReceiver 非常类似于事件编程中的监听器。与普通事件监听器不同的是:普通事件监听器监听的事件源是程序中的对象;而 BroadcastReceiver 监听的事件源是 Android 应用中的其他组件。
使用 BroadcastReceiver 组件接收广播消息比较简单,开发者只要实现自己的 BroadcastReceiver 子类,并重写 onReceive(Context context, Intent intent)
方法即可。当其他组件通过 sendBroadcast()
、sendStickyBroadcast()
或 sendOrderedBroadcast()
广播消息时,如该 BroadcastReceiver 也对该消息“感兴趣”(通过 IntentFilter 配置), BroadcastReceiver 的 onReceive(Context context, Intent intent)
方法将会被触发。
开发者实现了自己的 BroadcastReceiver 之后,通常有两种方式来注册这个系统级的“事件监听器”:
Context.registReceiver()
方法注册 BroadcastReceiver .<receiver.../>
元素完成注册。Android 系统为跨应用的数据交换提供了一个标准:ContentProvider。当用户实现自己的 ContentProvider 时,需要实现如下抽象方法。
insert(Uri, ContentValues)
:向 ContentProvider 插入数据;delete(Uri, ContentValues)
:删除 ContentProvider 中指定数据;update(Uri, ContentValues, String, String[])
:更新 ContentProvider 中指定数据;query(Uri, String[], String, String[], String)
:从 ContentProvider 查询数据。通常与 ContentProvider 结合使用的是 ContentResolver ,一个应用程序使用 ContentProvider 暴露自己的数据,而另一个应用程序则通过 ContentResolver 来访问数据。
Intent 是 Android 应用内不同组件之间通信的载体。当 Android 运行时需要连接不同的组件时,通常就需要借助于 Intent 来实现。Intent 可以启动应用中另一个 Activity ,也可以启动一个 Service 组件,还可以发送一条广播消息来触发系统中的 BroadcastReceiver 。也就是说,Activity、Service、BroadcastReceiver 三种组件之间的通信都以 Intent 作为载体,只是不同组件使用 Intent 的机制略有区别而已。
startActivity(Intent intent)
或 startActivityForResult(Intent intent, int requestCode)
方法,这两个方法中的 Intent 参数封装了需要启动的目标 Activity 的信息。startService(Intent intent)
方法或 bindService(Intent service, ServiceConnection conn, int flags)
方法,这两个方法中的 Intent 参数封装了需要启动的目标 Service 的信息。sendBroadcast(Intent intent)
、sendStickyBroadcast()
或 sendOrderedBroadcast()
来发送广播消息,这三个方法中的 Intent 参数封装了需要触发的目标 BroadcastReceiver 的信息。通过为 <manifest.../>
元素添加 <uses-permission.../>
子元素即可为程序本身声明权限。例如在 <manifest.../>
元素里添加如下代码:
1 | <!-- 声明该应用本身需要打电话的权限 --> |
通过为应用的各组件元素,如 <activity.../>
元素添加 <uses-permission.../>
子元素即可声明调用该程序所需的权限。
例如在 <activity.../>
元素里添加如下代码:
1 | <!-- 声明该应用本身需要发送短信的权限 --> |
Android 中可以申请的权限类型参见 Android 系统中的权限 。