import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.provider.CallLog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MainActivity extends AppCompatActivity {
private ListView lv;
private LoaderManager manager;
private SimpleCursorAdapter adapter;
private Uri uri = CallLog.Calls.CONTENT_URI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, null
, new String[]{CallLog.Calls.CACHED_NAME, CallLog.Calls.NUMBER}, new int[]{android.R.id.text1, android.R.id.text2},
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
lv.setAdapter(adapter);
/**
* 获取LoaderManager管理器对象
*/
manager = getLoaderManager();
/**
* 通过loader管理器对象,初始化一个loader对象
* id:初始化的loader对象的唯一id
* bundle:用来传递数据的bundle对象
* callback<D>: 接口,返回获取的数据,D返回的类型
*/
manager.initLoader(1, null, new LoaderManager.LoaderCallbacks<Cursor>() {
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
/**
* 使用CursorLoader类,在构造loader对象的同时,把数据同时也查询到
*/
CursorLoader loader = new CursorLoader(MainActivity.this,uri,null,null,null,null);
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
});
}
}
//在清单未见中添加 <uses-permission android:name="android.permission.READ_CALL_LOG"/>