1.内容提供ContentProvider
注意加权限
ContentResolver resolver=getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
Cursor cursor = resolver.query(uri, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME}, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
String[] names = cursor.getColumnNames();
StringBuffer buffer = new StringBuffer();
for (String name : names) {
String value=cursor.getString(cursor.getColumnIndex(name));
buffer.append("字段名:"+name+" 字段值:"+value);
}
Log.d("联系人",""+buffer);
cursor.moveToNext();
}
2.广播接收器Content Provider
必须注册,可在manifest中注册,也可以在代码中动态注册
新建类继承BroadCastReceiver,实现Onreveiver,以此实现接收广播
可以自己写发送广播
Intent intent=new Intent();
intent.setAction("com.lzjy.test1.mybroadcastreceiver");//要与注册时填写的相同才能接收
sendBroadcast(intent);
也可以接收系统发出的广播,写完接收器注册时写系统的action,注意加权限
3.闹钟,利用penddingIntent,以及广播接收器
mAlarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent=new Intent();
intent.setAction("com.lzjy.test1.mybroadcastreceiver");
PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0x23,intent,PendingIntent.FLAG_UPDATE_CURRENT);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,3000,pendingIntent);
取消时mAlarmManager.cancel(pendingIntent);
4.Service服务,必须注册后才能使用
写类继承Service,可以实现onCreate,onStartCommand,onDestory
代码中Intent intent=new Intent(getAppliacationcontext(),xxx.class);
startservice(intent)
可显式启动,也可隐式启动,类似Activity
服务Service运行在主线程中,耗时操作必须启动新的线程,多次启动一个服务会调用onStartCommand
对比服务,IntentService自身包含一个线程,可以生成一个消息队列,多次运行多个Intent会在队列中等待运行