Android 讲解:数据共享
2016-01-19 11:29
351 查看
Adnroid 中只有当前程序在运行时才能访问当前程序的SQLite 数据库,当一个程序的SQLite 需要让别的程序访问时应该怎么办?
创建
使用
给予程序读取通讯录权限。
通讯录程序也是使用了
MainActivity.java
DatabaseProvider.java
这个类虽然比较长,但是非常简单,就是继承
最主要的是OnCreate 方法,这个方法获取一个SQLite 数据库的操作对象。只要有了这个操作对象,就能操作数据库了,在增删改查的方法里面,可以判断共享的url 是否符合规则。
在AndroidManifest.xml 的application 标签添加
创建
ContentResolver的子类进行本程序的数据共享。
使用
ContentResolver的对象进行其他程序数据访问。
如何访问通讯录
在AndroidManifest.xml的manifest标签内添加<uses-permission android:name="android.permission.READ_CONTACTS"/>
给予程序读取通讯录权限。
通讯录程序也是使用了
ContentResolver的子类进行数据共享。
MainActivity.java
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(Phone.CONTENT_URI, null, null, null, null); Log.i(tag, Phone.CONTENT_URI.toString()); while (cursor.moveToNext()) { String name = cursor.getString(cursor .getColumnIndex(Phone.DISPLAY_NAME)); String number = cursor.getString(cursor .getColumnIndex(Phone.NUMBER)); Log.i(tag, name + ":\t" + number); } }
getContentResolver();返回值用来增删改查。
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
Param | info |
---|---|
uri | 这是一个Uri对象,使用ContentResolver 对象操作其他程序的数据必须要一个Uri对象,Uri 对象描述了操作那个程序,那个表的数据。Uri.parse("content://cn.met0.androidtest/tableName");返回的是一个Uri对象,其中cn.met0.androidtest 为共享数据的程序包名,而tableName 为操作的表名。 |
projection | 查询的列数组 |
selection | 查询的条件 |
selectionArgs | 查询条件的占位符值 |
sortOrder | 查询排序 |
共享自己程序的数据
共享自己的程序数据需要写一个类,这个类继承ContentProvider可以供其他程序调用。(这个类在共享数据的程序内)
DatabaseProvider.java
package cn.met0.android.chapter2; import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.net.Uri; import android.util.Log; public class DatabaseProvider extends ContentProvider { private static String tag = "DatabaseProvider"; private DBHelper msql; @Override public boolean onCreate() { msql = new DBHelper(getContext(), "chapter2.db", null, 1); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return msql.getWritableDatabase().query("user", null, null, null, null, null, null); } @Override public String getType(Uri uri) { Log.i(tag, "getType"); return null; } @Override public Uri insert(Uri uri, ContentValues values) { Log.i(tag, "insert"); return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.i(tag, "delete"); return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.i(tag, "update"); return 0; } }
这个类虽然比较长,但是非常简单,就是继承
ContentProviter类,重写它的方法。
最主要的是OnCreate 方法,这个方法获取一个SQLite 数据库的操作对象。只要有了这个操作对象,就能操作数据库了,在增删改查的方法里面,可以判断共享的url 是否符合规则。
在AndroidManifest.xml 的application 标签添加
<provider android:exported="true" android:name="cn.met0.android.chapter2.DatabaseProvider" android:authorities="cn.met0.android.chapter2"/>
android:exported="true"其他程序访问
android:name共享的ContentProviter 子类,这个类是让其他程序通过
android:authorities进行访问。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories