一、什麼是Android Uri
Android Uri是一種資源標識符號,可以用來表示一種資源類型,如:圖片、視頻、音頻等。在Android開發中,Uri常常用於通過Content Provider共享數據。
二、獲取Android文件路徑的幾種方式
在Android開發中,獲取文件路徑的方式有很多種。以下是常見的幾種方法。
1、使用Intent選擇文件並獲取Uri
import android.content.Intent
import android.provider.MediaStore
def choose_file():
intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
activity.startActivityForResult(intent, PICK_IMAGE_REQUEST)
def onActivityResult(requestCode, resultCode, data):
if requestCode == PICK_IMAGE_REQUEST and resultCode == RESULT_OK and data != None:
uri = data.getData()
在此方法中,我們可以使用Intent來選擇文件,並獲取文件的Uri。該方法需要使用startActivityForResult()方法進行啟動,並在onActivityResult()方法中獲取返回的Uri。
2、使用文件路徑轉換獲取Uri
import android.net.Uri
import android.os.Environment
def get_file_path(file_name):
file = Environment.getExternalStorageDirectory().getPath() + "/" + file_name
return file
def get_uri(file_path):
uri = Uri.fromFile(File(file_path))
return uri
在此方法中,我們可以先通過文件名獲取文件路徑,然後通過文件路徑轉換獲取Uri。使用此方法可能需要相應的讀寫存儲權限。
3、使用Content Resolver獲取Uri
import android.provider.MediaStore
def get_uri(file_name):
cursor = activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
null,
MediaStore.Images.Media.DISPLAY_NAME + "='" + file_name + "'",
null,
null)
if cursor.moveToFirst():
uri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))
return uri
在此方法中,我們可以使用Content Resolver查詢指定文件名的Uri。該方法可能需要讀取存儲權限。
三、綜合示例
import android.content.Intent
import android.net.Uri
import android.os.Environment
import android.provider.MediaStore
def choose_file():
intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
activity.startActivityForResult(intent, PICK_IMAGE_REQUEST)
def get_file_path(file_name):
file = Environment.getExternalStorageDirectory().getPath() + "/" + file_name
return file
def get_uri(file_name):
uri = ""
cursor = activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
null,
MediaStore.Images.Media.DISPLAY_NAME + "='" + file_name + "'",
null,
null)
if cursor.moveToFirst():
uri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))
if uri == "":
file_path = get_file_path(file_name)
uri = Uri.fromFile(File(file_path))
return uri
def onActivityResult(requestCode, resultCode, data):
if requestCode == PICK_IMAGE_REQUEST and resultCode == RESULT_OK and data != None:
uri = get_uri(data.getData())
在此綜合示例中,我們結合以上三種方法,使用choose_file()方法選擇文件,並在onActivityResult()方法中獲取文件的Uri。在get_uri()方法中,我們優先使用Content Resolver獲取Uri,如果獲取失敗,則使用文件路徑轉換獲取Uri。
原創文章,作者:CQSL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150169.html