一、什麼是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的優點有:數據共享、文件管理、硬體訪問和元數據支持。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271487.html