*異步獲取短信記錄
*/public class MainActivity extends Activity implements LoaderCallbacks{
private LoaderManager manager;
private ContentResolver resolver;
private Uri uri;
private ListView listView;
private SimpleCursorAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
null,
new String[]{Sms.Draft.ADDRESS,Sms.Draft.BODY},
new int[]{android.R.id.text1,android.R.id.text2},
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
listView.setAdapter(adapter);
resolver = getContentResolver();
uri = Sms.CONTENT_URI;//Uri.parse("content://sms");
manager = getLoaderManager();
//如果是v4包汹桦,那么activity首先要是屬于v4印蓖,獲取方式不同
// manager = getSupportLoaderManager();
manager.initLoader(2, null, this);
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
//Log.i("info", "======="+id +args);
//創(chuàng)建一個loader對象
AsyncTaskLoader loader = new AsyncTaskLoader(this) {
@Override
protected void onStartLoading() {
super.onStartLoading();
//如果是第一次加載loader,必須強制加載數(shù)據(jù)
forceLoad();
}
//在子線程中調(diào)用,在這個方法中就去執(zhí)行查詢數(shù)據(jù)庫的操作
@Override
public Cursor loadInBackground() {
//發(fā)起查詢動作
Cursor cursor = resolver.query(uri, null, null, null, null);
//必須要返回游標昆雀,返回到創(chuàng)建loader里面
return cursor;
}
};
//這個loader中就有攜帶cursor游標
return loader;
}
@Override
public void onLoadFinished(Loader loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader loader) {
adapter.swapCursor(null);
}
}