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