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()方法。