1.
Android组件之BroadcastReceiver
是一个专注于接收广播通知信息,并作出对应处理的组件。很多广播是源自于系统代码的——比如,通知临时区改变,电池电量低,拍摄了一张照片或用户改变了语言选项。
静态注册广播事件。
Step1:建立自己的广播类,
public class MyBC extends BroadcastReceiver {
public static final String ACTION="com.example.l004usingbc.intent.action.MyBC";
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
System.out.println("onRecive, data = "+arg1.getStringExtra("txt"));
}
}
当接收到广播的信息后,在自己建立的类会自动调用onReceive()方法。
Step2:在AndroidMainfest.xml中注册自己建立的类
<receiver android:name="MyBC"></receiver>
Step3:在MainActivity中的onCreate()方法中,为触发广播的按钮添加监听事件。
btnSendBroadCast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, MyBC.class);
/*Intent i = new Intent(MyBC.ACTION);
i.putExtra("txt", "hello suichen");
sendBroadcast(i);*/
}
});
}
private final MyBC mybc = new MyBC();
便完成了静态的注册。
动态注册和接触注册。
Step1完全相同。在Step2中注释掉在AndroidMainfest.xml添加的
<receiver android:name="MyBC"></receiver>
<activity
android:name="com.example.l004usingbc.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>
在MainActivity中的代码如下:
btnRegBCR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
registerReceiver(mybc, new IntentFilter(MyBC.ACTION));
}
});
btnUnregBCR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
unregisterReceiver(mybc);
}
});
btnSendBroadCast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//Intent i = new Intent(MainActivity.this, MyBC.class);
Intent i = new Intent(MyBC.ACTION);
i.putExtra("txt", "hello suichen");
sendBroadcast(i);
}
});
}
private final MyBC mybc = new MyBC();
在这种动态的方式中,只有注册了BroadcastReciver,再按发送信息,MyBC才能收到发来的信息。
Android组件之contentprovider.
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享数据。使用ContentProvider共享数据的好处是统一了数据访问方式。
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询时,可以使用ContentResolver来完成。要获取ContentResolver对象,可以使用Activity提供的getContentResolver()方法。ContentResolver使用insert、delete、update、query方法,来操作数据。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while(c.moveToNext()) {
System.out.println(">>>>>>>"+c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
}
}
要想能获取到电话薄中联系人的姓名,还需要在AndroidManifest.xml配置permission。
<uses-permission android:name="android.permission.READ_CONTACTS"/>