安卓核心组件三ContentProvider
来源:互联网 发布:2017美国网络星期一 编辑:程序博客网 时间:2024/05/08 06:59
安卓核心组件三ContentProvider
- 简介:ContentProvider实现了在不同应用间的数据共享,这个核心组件的使用频率相对较小,主要是访问安卓系统中的数据,例如联系人数据共享、短信数据共享、图片和音乐等媒体数据共享
- 如何实现内容共享请参考以下代码
`public class StudentContentProvider extends ContentProvider {private static UriMatcher matcher;private static String authority = "cn.myapp.providers.student";private static final int MATCH_ROOT = 1;private static final int MATCH_PATH = 2;private static final int MATCH_ID = 3;private String table = "student";static { matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI(authority, null, MATCH_ROOT); matcher.addURI(authority, "hello", MATCH_PATH); matcher.addURI(authority, "#", MATCH_ID);}@Overridepublic boolean onCreate() { return false;}@Overridepublic Cursor query(Uri uri, String[] columns, String selection, String[] selectionArgs, String orderBy) { SQLiteDatabase db = new DbOpenHelper(getContext()) .getReadableDatabase(); Cursor c = null; switch (matcher.match(uri)) { case MATCH_ROOT: // content://cn.tedu.providers.student/ c = db.query(table, columns, selection, selectionArgs, null, null, orderBy); break; case MATCH_ID: // content://cn.tedu.providers.student/5 long id = ContentUris.parseId(uri); if(selection != null && !"".equals(selection)) { selection += " and _id=" + id; } c = db.query(table, columns, selection, selectionArgs, null, null, orderBy); break; } return c;}@Overridepublic String getType(Uri uri) { // TODO Auto-generated method stub return null;}@Overridepublic Uri insert(Uri uri, ContentValues values) { if(matcher.match(uri) == MATCH_ROOT) { SQLiteDatabase db = new DbOpenHelper(getContext()) .getReadableDatabase(); long id = db.insert("student", null, values); return ContentUris.withAppendedId(uri, id); } return null;}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) { throw new IllegalArgumentException("不允许执行删除操作!");}@Overridepublic int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO Auto-generated method stub return 0;}
很少用到这个部分的内容,因为除了系统其他的app很注重自己的数据安全,不会开放给其他的应用使用
- ContentProvider的主要应用:访问系统的数据,如联系人,音频,视频,图片,短信等等
ContentResolver cr = getContentResolver(); Uri uri = Media.EXTERNAL_CONTENT_URI; Cursor c = cr.query(uri, null, null, null, null); for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { Log.d("media store", c.getString(c.getColumnIndex("_data")));
这段代码的作用就是获取系统的所有的图片,是通过访问了系统的sqlite数据库来实现的,在data文件下可以找到这些数据库。
public List<Music> getData() { ContentResolver cr = cw.getContentResolver(); Uri uri = Media.EXTERNAL_CONTENT_URI; Cursor c = cr.query(uri, null, null, null, null); List<Music> data = new ArrayList<Music>(); Music music; for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { music = new Music(); music.setId(c.getLong(c.getColumnIndex("_id"))); music.setData(c.getString(c.getColumnIndex("_data"))); music.setAlbum(c.getString(c.getColumnIndex("album"))); music.setArtits(c.getString(c.getColumnIndex("artist"))); music.setDuration(c.getInt(c.getColumnIndex("duration"))); music.setTitle(c.getString(c.getColumnIndex("title"))); data.add(music); } return data;}
这段代码的作用就是获取系统的所有音频
- 补充:相应的数据库文件的位置:
- 音频:data/data/com.android.providers.media/databases/externel.db
- data/data/这个位置下有一系列的com.android.*命名的文件,都是系统提供的相应数据库。
0 0
- 安卓核心组件三ContentProvider
- 安卓四大组件之ContentProvider
- 安卓入门---四大组件--ContentProvider
- 安卓四大组件之ContentProvider
- 安卓四大组件——ContentProvider
- Android安卓——ContentProvider组件
- 安卓四大核心组件之Activity
- 安卓核心组件一activity
- 安卓核心组件二service
- 安卓核心组件四BroadCastReceiver
- 安卓核心五application组件
- 安卓四大核心组件详解
- 安卓四大核心组件之Activity
- 安卓四大组件之——ContentProvider学习
- 安卓四大组件之一ContentProvider内容提供者
- Android四大组件(三) ContentProvider
- Android四大核心组件之contentProvider
- Android四大核心组件之ContentProvider
- Linux zip命令
- leetcode 2. Add Two Numbers
- 在windows下配置pthread
- Base64String
- 求int型数据在内存中存储时1的个数
- 安卓核心组件三ContentProvider
- ambari高级操作
- 18.shell脚本编程(3)
- 迈步从头越
- UISearchBar协议常用方法
- Kali linux & Aircrack-ng 破解 WPA/WPA2 无线网络
- 安卓核心组件四BroadCastReceiver
- 手机app测试分析方法 -- 进阶方法
- 冒泡排序