深入淺出Android Provider

一、什麼是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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 14:56
下一篇 2024-12-16 14:56

相關推薦

  • Android ViewPager和ScrollView滑動衝突問題

    Android開發中,ViewPager和ScrollView是兩個常用的控制項。但是當它們同時使用時,可能會發生滑動衝突的問題。本文將從多個方面介紹解決Android ViewPa…

    編程 2025-04-28
  • Android如何點擊其他區域收起軟鍵盤

    在Android應用中,當輸入框獲取焦點彈出軟鍵盤後,我們希望能夠點擊其他區域使軟鍵盤消失,以提升用戶體驗。本篇文章將說明如何實現這一功能。 一、獲取焦點並顯示軟鍵盤 在Andro…

    編程 2025-04-28
  • Android Studio HUD 實現指南

    本文將會以實例來詳細闡述如何在 Android Studio 中使用 HUD 功能實現菊花等待指示器的效果。 一、引入依賴庫 首先,我們需要在 build.gradle 文件中引入…

    編程 2025-04-27
  • Android和Vue3混合開發方案

    本文將介紹如何將Android和Vue3結合起來進行混合開發,以及其中的優勢和注意事項。 一、環境搭建 在進行混合開發之前,需要搭建好相應的開發環境。首先需要安裝 Android …

    編程 2025-04-27
  • Android Java Utils 可以如何提高你的開發效率

    Android Java Utils 是一款提供了一系列方便實用的工具類的 Java 庫,可以幫助開發者更加高效地進行 Android 開發,提高開發效率。本文將從以下幾個方面對 …

    編程 2025-04-27
  • Android JUnit測試完成程序自動退出決方法

    對於一些Android JUnit測試的開發人員來說,程序自動退出是一個經常面臨的困擾。下面從多個方面給出解決方法。 一、檢查測試代碼 首先,我們應該仔細檢查我們的測試代碼,確保它…

    編程 2025-04-25
  • 深入淺出統計學

    統計學是一門關於收集、分析、解釋和呈現數據的學科。它在各行各業都有廣泛應用,包括社會科學、醫學、自然科學、商業、經濟學、政治學等等。深入淺出統計學是指想要學習統計學的人能夠理解統計…

    編程 2025-04-25
  • Android Activity啟動流程

    一、Activity概述 Android應用程序是由許多Activity組成的。一個Activity代表一個屏幕上的窗口。用戶與應用程序交互時,Activity會接收用戶的輸入並處…

    編程 2025-04-25
  • Android單元測試詳解

    一、單元測試概述 單元測試是指對軟體中的最小可測試單元進行檢查和驗證。在Android開發中,單元測試是非常重要的一環,可以保證代碼的質量、穩定性以及可維護性。 在Android開…

    編程 2025-04-25
  • Android WebView載入本地HTML

    一、介紹 Android WebView是一個內置的瀏覽器,它允許開發人員在應用中嵌入網頁。使用WebView可以輕鬆地在應用程序中顯示本地或遠程的HTML內容。本篇文章將重點講述…

    編程 2025-04-24

發表回復

登錄後才能評論