一、什么是Android Provider
Android Provider是Android系统的一种提供各种数据共享方式的机制。它提供了标准的接口,在Android系统内部和与其他应用程序共享数据时都可以使用。Android Provider not only 提供了基本类型(如文本、音频、视频等)的数据,也提供了一些应用程序使用的元数据,如日历、通讯录、设置等。此外,它还可以提供对设备硬件(如相机、音频、电池等)的访问和控制。
二、Android Provider的基本结构
Android Provider提供了一种标准的数据结构表示,由表(table)、行(row)和列(column)组成。
1.表(table)
Android Provider的基本结构是表,表可以看做是数据集的集合。在Android中,表的实现通常对应着一个ContentProvider,ContentProvider封装了对表的操作接口,包括增、删、改、查等操作。每个ContentProvider可以提供多个表,每个表有唯一的名称(通过ContentProvider的URI标识)。
2.行(row)
在Android Provider中,行是数据集的基本单位。在表中,行由一组唯一标识符(记录ID)和一组数据(字段,column)组成,这组数据以一定格式/类型(如文本、数字)保存,供后续使用。
3.列(column)
在表中,每一列对应一类数据。例如,联系人列表中每个人都有一个名字、一个邮箱、一个电话号码等信息,这些信息就对应表中不同的列。
// ContactsContract包下Contacts提供了通讯录应用所需的数据表信息,如下: public final class Contacts { /** * The content:// style URL for this table * @hide */ @UnsupportedAppUsage public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/contacts"); /** * The ID of the contact. *Type: INTEGER (long)
*/ public static final String _ID = BaseColumns._ID; /** * The name of the contact, or null if the contact has no name. *Type: TEXT
*/ public static final String DISPLAY_NAME = "display_name"; ...... }
三、Android Provider数据操作
1.增加数据
要插入一行到表中,可以使用ContentResolver.insert()方法,该方法接收一个Uri参数,指示将数据插入到哪个表中。还要传入一个ContentValue对象,其中包含新行的列和值。
ContentValues values = new ContentValues(); values.put(Contacts.DISPLAY_NAME, "John"); values.put(Contacts.HAS_PHONE_NUMBER, 1); Uri contactUri = getContentResolver().insert(Contacts.CONTENT_URI, values); long contactId = ContentUris.parseId(contactUri);
2.删除数据
要删除表中的行,可以使用ContentResolver.delete()方法,该方法接收一个Uri参数,表示要从哪个表中删除数据,还需要一个where子句,指定要删除哪些行。
String selection = Contacts._ID + " = ?"; String[] selectionArgs = new String[]{String.valueOf(contactId)}; int deleteRows = getContentResolver().delete(Contacts.CONTENT_URI, selection, selectionArgs);
3.更新数据
要更新表中的行,可以使用ContentResolver.update()方法,该方法接收一个Uri参数,表示要从哪个表中更新数据,还需要一个ContentValue对象,其中包括要更新的值和一个where子句,指定要更新哪些行。
String selection = Contacts._ID + " = ?"; String[] selectionArgs = new String[]{String.valueOf(contactId)}; ContentValues values = new ContentValues(); values.put(Contacts.DISPLAY_NAME, "Peter"); int updateRows = getContentResolver().update(Contacts.CONTENT_URI, values, selection, selectionArgs);
4.查询数据
要从表中检索数据,可以使用ContentResolver.query()方法,该方法接收一个Uri参数,该参数指示从哪个表中检索数据,还可以接收其他参数,例如where子句和排序方式。
String[] projection = new String[]{Contacts._ID, Contacts.DISPLAY_NAME}; String selection = Contacts.HAS_PHONE_NUMBER + " = ?"; String[] selectionArgs = new String[]{"1"}; String sortOrder = Contacts.DISPLAY_NAME + " ASC"; Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI, projection, selection, selectionArgs, sortOrder); if (cursor != null && cursor.moveToFirst()) { do { long id = cursor.getLong(cursor.getColumnIndex(Contacts._ID)); String name = cursor.getString(cursor.getColumnIndex(Contacts.DISPLAY_NAME)); } while (cursor.moveToNext()); cursor.close(); }
四、Android Provider的优点
1.数据共享
Android Provider提供了标准接口,可以方便地在不同应用之间共享数据。这种共享机制不会暴露敏感信息,能够确保数据的机密性和安全性。同时,Android Provider还提供了访问控制接口,可以控制对数据的访问权限。
2.文件管理
Android Provider提供了对文件系统的访问接口,应用程序可以使用这些接口访问存储在设备上的各种文件,从而实现文件的共享和共享。此外,Android Provider还允许应用程序分享它们自己的文件到设备上的其他应用程序。
3.硬件访问
Android Provider还提供了一些接口,允许应用程序访问各种设备硬件,例如相机、音频、电池等,这为应用程序的开发者提供了更大的灵活性。
4.元数据支持
Android Provider不仅提供了对基本数据类型的支持,还提供了一些应用程序使用的元数据,如日历、通讯录、设置等。
五、总结
Android Provider是Android系统的一种提供各种数据共享方式的机制,它提供了标准的接口,在Android系统内部和与其他应用程序共享数据时都可以使用。Android Provider提供了一种标准的数据结构表示,由表(table)、行(row)和列(column)组成。开发者可以通过ContentResolver.insert()、ContentResolver.delete()、ContentResolver.update()和ContentResolver.query()等方法对表进行增、删、改、查,从而达到共享数据的目的。Android Provider的优点有:数据共享、文件管理、硬件访问和元数据支持。