Activity: 处理 UI 互动的事情
Service:幕后服务(如硬体及 Driver 的服务)
BroadcastReceiver: 接收讯息及事件处理
ContentProvider: 储存共用资料
在AndroidManifest.xml中写出这些需要由系统生成的对象
先来简单的,内容提供者ContentProvider。
初期学习基本不用写自己APP的
ContentProvider,主要是调用别的APP的。
通过ContentResolver对象来调用别的APP通过
ContentProvider
提供的共享数据。
例如获取短信信息:
ContentResolver resolver=getContentResolver();
Uri uri = Uri.parse("content://sms");
Cursor cursor = resolver.query(uri, null, null, null, null);
TextView tv_show = (TextView) findViewById(R.id.tv_show);
while(cursor.moveToNext()){
String address = cursor.getString(cursor.getColumnIndex("address"));
String type = cursor.getString(cursor.getColumnIndex("type"));
long date = cursor.getLong(cursor.getColumnIndex("date"));
String body = cursor.getString(cursor.getColumnIndex("body"));
String str="";
if("1".equals(type)){
str+="发送";
}else{
str+="接受";
}
tv_show.setText("类型:"+str+"地址:"+address+"时间:"+date+"内容:"+body+"\n");
}
cursor.close();
广播接收者BroadcastReceiver和服务Services使用实例
开机启动APP后台服务
BroadcastReceiver有两种使用方式,一是
在应用程序的代码中注册;
二是在androidMainfest.xml中注册,这里使用第二种,并且设置了
<intent-filter >激活条件(另一种激活方式是
通过Intent对象至给Context.sendBroadcast()、
Context.sendOrderedBroadcast()或 Context.sendStickyBroadcast()Android会调用所有对此广播有兴趣的广播接收器
)
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
接下来在
MyReceiver里重写
onReceive()方法启动需要的
Services即可,
启动
Services也有两种方式,
第一种
用StartService()方法来进行方法的调用Service
新产生的服务是独立于调用者的,有自己独立的生命周期。
第二种
用 bindService()方法来绑定Service,这个Service和调用者相关,调用者退出Service也就终止。这里直接用第一种即可。
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, MyService.class);
service.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(service);//Intent激活组件(Service)
}
活动Activity使用时的关键一是和UI界面控件相关,二是就
在不同生命周期运行需要的代码。
主界面的
Activity的启动是通过在AndroidManifest.xml中设置实现,
<activity
android:name=".MainActivity"android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在启动别的
Activity
时
也是通过传递一个Intent对象来实现的。
设置好
Intent对象后传入给
Context.startActivity()或Activity.startActivityForResult()
就可以载入(或指定新工作给)一个
Activity
了。
相应的
Activity
可以通过调用getIntent() 方法来查看激活它的intent。
如果它期望它所启动的那个
Activity
返回一个结果,它会以调用startActivityForResult()来取代startActivity()。比如说,如果它启动了另外一个
Activity
以使用户挑选一张照片,它也许想知道哪张照片被选中了。结果将会被封装在一个Intent对象中,并传递给发出调用的
Activity
的onActivityResult()方法。