四大组件基本使用实践总结

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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值