詳解Android Uri

一、Uri的概念

Uri,即Uniform Resource Identifier,統一資源標誌符,是Web上所有資源的唯一標識符。

在Android中,Uri可以代表不同的數據類型,如文件、圖片、音頻等。

Uri以字符串的形式存在,主要格式為:scheme://host:port/path?query#fragment。其中,scheme表示模式,如http、https等;host表示主機名;port表示端口號;path是主機名後面的部分;query表示查詢參數;fragment表示片段標識符。

二、Uri的使用方式

在Android開發中,Uri可以通過以下方式來使用:

1. 通過資源ID獲取Uri

    Uri uri = Uri.parse("android.resource://packageName/" + R.raw.my_movie);

此處的“my_movie”為raw目錄下的文件名,packageName為當前應用程序的包名。

2.通過文件路徑獲取Uri

    Uri uri = Uri.parse("file:///sdcard/my_image.jpg");

此處的“my_image.jpg”為文件名,/sdcard/為文件路徑。

3.通過ContentProvider獲取Uri

    Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null); 
    if (cursor != null) {
        while (cursor.moveToNext()) {
            String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
            Uri uri = Uri.parse("file://" + path);
        }
        cursor.close();
    }

通過ContentResolver查詢圖片文件的Uri。

三、Uri的使用場景

1.用作Intent的數據

    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.parse("http://www.example.com");
    intent.setData(uri);
    startActivity(intent);

通過Uri打開網頁。

2.用作ContentProvider的數據

ContentProvider可以將存儲在SQLite數據庫、文件系統或Web上的數據暴露給其他應用程序。

    //在MyContentProvider中的query方法中
    Cursor cursor = db.query(tableName, projection, selection, selectionArgs, null, null, sortOrder);
    cursor.setNotificationUri(getContext().getContentResolver(), uri);
    return cursor;

通過Uri將MyContentProvider中的數據暴露出去。

3.用作圖片資源的地址

    Glide.with(context)
        .load(Uri.parse("content://media/external/images/media/123"))
        .into(imageView);

通過Uri加載圖片。

四、Uri的注意事項

1.權限問題

訪問文件系統需要申請訪問權限,如讀寫外部存儲需要在Manifest中聲明Permission。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.Uri的編碼問題

Uri中可能包含一些特殊字符,如空格、&、#等,需要對這些字符進行編碼。

    String encodedString = URLEncoder.encode(uriString, "UTF-8")

3.Uri的區分大小寫問題

Android中的Uri是區分大小寫的,相同的Uri如果大小寫不同,會被認為是不同的Uri。

4.Uri的空指針問題

在將字符串轉換為Uri時,需要進行非空判斷,避免出現空指針異常。

    if (!TextUtils.isEmpty(uriString)) {
        Uri uri = Uri.parse(uriString);
    }

五、總結

Uri是Android中非常重要的一個概念,它在許多場合都有廣泛的應用。在使用Uri時,需要注意字符串的編碼、空指針異常、權限問題等。我們需要在開發過程中靈活運用Uri,為我們的應用增添更多的功能和特性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/235575.html

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

相關推薦

  • 解析URI編碼規則

    URI(統一資源標識符)是用來標識互聯網上資源的字符串文本標識符,是訪問互聯網資源的地址。在將URI傳送到服務器或瀏覽器時,需要進行特定編碼處理,這個編碼方式就是URI編碼規則。 …

    編程 2025-04-28
  • 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
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論