C# urn“com.google.android.apps.photos.content”.equals(uri.getAuthority()); } }
在Xamarin Andriod中: (摘自@Rino-Answer)C# urn“com.google.android.apps.photos.content”.equals(uri.getAuthority()); } },c#,android,xamarin,android-contentresolver,C#,Android,Xamarin,Android Contentresolver,在Xamarin Andriod中: (摘自@Rino-Answer) 使用系统; 使用Android.Content; 使用Android.Database; 使用Android.OS; 使用Android.Provider; 使用Java.IO; 名称空间 { 公共类URI { 私有静态字符串GetFileName(上下文上下文,Android.Net.Uri) { 字符串结果=null; if(uri.Scheme.Equals(“内容”)) { ICursor cursor=contex
使用系统;
使用Android.Content;
使用Android.Database;
使用Android.OS;
使用Android.Provider;
使用Java.IO;
名称空间
{
公共类URI
{
私有静态字符串GetFileName(上下文上下文,Android.Net.Uri)
{
字符串结果=null;
if(uri.Scheme.Equals(“内容”))
{
ICursor cursor=context.ContentResolver.Query(uri,null,null,null);
尝试
{
if(cursor!=null&&cursor.MoveToFirst())
{
结果=cursor.GetString(cursor.GetColumnIndex(OpenableColumns.DisplayName));
}
}
最后
{
cursor.Close();
}
}
如果(结果==null)
{
result=uri.Path;
int cut=result.LastIndexOf('/');
如果(切割!=-1)
{
结果=结果子串(切割+1);
}
}
返回结果;
}
//@TargetApi(Build.VERSION\u code.KITKAT)
公共静态字符串GetPath(上下文上下文,Android.Net.Uri)
{
bool isKitKat=Build.VERSION.SdkInt>=Android.OS.BuildVersionCodes.Kitkat;//Build.VERSION\u CODES.Kitkat;
//文档提供者
if(isKitKat&&DocumentsContract.IsDocumentUri(context,uri))
{
//外部存储提供程序
if(IsExternalStorageDocument(uri))
{
字符串docId=DocumentsContract.GetDocumentId(uri);
String[]split=docId.split(“:”);
字符串类型=拆分[0];
if(“primary”.Equals(type,StringComparison.InvariantCultureIgnoreCase))//equalsIgnoreCase
{
返回Android.OS.Environment.GetExternalStoragePublicDirectory(type)+“/”+split[1];
}
}
//下载提供商
else if(IsDownloadsDocument(uri))
{
/*
最终字符串id=DocumentsContract.getDocumentId(uri);
最终Uri contentUri=ContentUris.withAppendedId(
解析content://downloads/public_downloads),长。价值(id));
返回getDataColumn(上下文、contentUri、null、null);
*/
字符串fileName=GetFileName(上下文,uri);
File downFile=新文件(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads),“/”+文件名);
返回downFile.AbsolutePath;
}
//媒体提供商
else if(IsMediaDocument(uri))
{
字符串docId=DocumentsContract.GetDocumentId(uri);
String[]split=docId.split(“:”);
字符串类型=拆分[0];
Android.Net.Uri contentUri=null;
如果(“图像”。等于(类型))
{
contentUri=MediaStore.Images.Media.ExternalContentUri;
}
else if(“视频”。等于(类型))
{
contentUri=MediaStore.Video.Media.ExternalContentUri;
}
else if(“音频”。等于(类型))
{
contentUri=MediaStore.Audio.Media.ExternalContentUri;
}
字符串选择=“\u id=?”;
字符串[]selectionArgs=新字符串[]{
拆分[1]
};
返回GetDataColumn(上下文、contentUri、selection、selectionArgs);
}
}
//MediaStore(和通用)
else if(“content”.Equals(uri.Scheme、StringComparison.InvariantCultureIgnoreCase))
{
//返回远程地址
如果(iGoogle PhotoSuri(uri))
返回uri.LastPathSegment;
返回GetDataColumn(上下文、uri、null、null);
}
//文件
else if(“file”.Equals(uri.Scheme,StringComparison.InvariantCultureIgnoreCase))
{
返回uri.Path;
}
返回null;
}
/**
*获取此Uri的数据列的值。这对于
*MediaStore URI和其他基于文件的内容提供程序。
*
*@param context是上下文。
*@param uri要查询的uri。
*查询中使用的@param selection(可选)筛选器。
*@param selectionArgs(可选)查询中使用的选择参数。
*@返回_数据列的值,该列通常是文件路径。
*/
公共静态字符串GetDataColumn(上下文上下文、Android.Net.Uri、字符串选择、,
字符串[]selectionArgs)
{
ICursor cursor=null;
String column=“_data”;
字符串[]投影={
柱
};
尝试
{
cursor=context.ContentResolver.Query(uri、投影、选择、selectionArgs、,
无效);
if(cursor!=null&&cursor.MoveToFirst())
{
int index=cursor.GetColumnIndexOrThrow(列);
返回cursor.GetString(索引);
}
}
最后
{
如果(光标!=null)
cursor.Close();
}
返回null;
}
/**
*@param uri要检查的uri。
*@return Uri授权是否为ExternalStorageProvider。
*/
公众的
静态bool IsExternalStorageDocument(Android.Net.Uri)
{
返回“com.android.externalstorage.documents”.Equals(uri.Authority);
}
/**
*@param uri要检查的uri。
*@return Uri权限是否为DownloadsProvider。
*/
公共静态bool IsDownloadsDocument(Android.Net.Uri)
{
{
string filePath = null;
Uri _uri = data.Data;
if (_uri != null && "content".Equals(_uri.Scheme))
{
ICursor cursor = this.ContentResolver.Query(_uri, new String[] { Android.Provider.MediaStore.Images.ImageColumns.Data }, null, null, null);
cursor.MoveToFirst();
filePath = cursor.GetString(0);
cursor.Close();
}
else
{
filePath = _uri.Path;
}
return filePath;
}
public class Uris {
private static String getFileName(Context context, Uri uri) {
String result = null;
if (uri.getScheme().equals("content")) {
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
cursor.close();
}
}
if (result == null) {
result = uri.getPath();
int cut = result.lastIndexOf('/');
if (cut != -1) {
result = result.substring(cut + 1);
}
}
return result;
}
@TargetApi(Build.VERSION_CODES.KITKAT)
public static String getPath(final Context context, final Uri uri)
{
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
}
// DownloadsProvider
else if (isDownloadsDocument(uri)) {
/*
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://<span id=\"IL_AD1\" class=\"IL_AD\">downloads</span>/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
*/
String fileName = getFileName(context, uri);
File downFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "/"+fileName);
return downFile.getAbsolutePath();
}
// MediaProvider
else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {
// Return the remote address
if (isGooglePhotosUri(uri))
return uri.getLastPathSegment();
return getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
/**
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context The context.
* @param uri The Uri to query.
* @param selection (Optional) Filter used in the query.
* @param selectionArgs (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/
public static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public
static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is Google <span id="IL_AD8" class="IL_AD">Photos</span>.
*/
public static boolean isGooglePhotosUri(Uri uri) {
return "com.google.android.apps.photos.content".equals(uri.getAuthority());
}
}
using System;
using Android.Content;
using Android.Database;
using Android.OS;
using Android.Provider;
using Java.IO;
namespace <YourNameSpace>
{
public class Uris
{
private static String GetFileName(Context context, Android.Net.Uri uri)
{
String result = null;
if (uri.Scheme.Equals("content"))
{
ICursor cursor = context.ContentResolver.Query(uri, null, null, null, null);
try
{
if (cursor != null && cursor.MoveToFirst())
{
result = cursor.GetString(cursor.GetColumnIndex(OpenableColumns.DisplayName));
}
}
finally
{
cursor.Close();
}
}
if (result == null)
{
result = uri.Path;
int cut = result.LastIndexOf('/');
if (cut != -1)
{
result = result.Substring(cut + 1);
}
}
return result;
}
// @TargetApi(Build.VERSION_CODES.KITKAT)
public static String GetPath(Context context, Android.Net.Uri uri)
{
bool isKitKat = Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat; //Build.VERSION_CODES.Kitkat;
// DocumentProvider
if (isKitKat && DocumentsContract.IsDocumentUri(context, uri))
{
// ExternalStorageProvider
if (IsExternalStorageDocument(uri))
{
String docId = DocumentsContract.GetDocumentId(uri);
String[] split = docId.Split(":");
String type = split[0];
if ("primary".Equals(type, StringComparison.InvariantCultureIgnoreCase)) //equalsIgnoreCase
{
return Android.OS.Environment.GetExternalStoragePublicDirectory(type) + "/" + split[1];
}
}
// DownloadsProvider
else if (IsDownloadsDocument(uri))
{
/*
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://<span id=\"IL_AD1\" class=\"IL_AD\">downloads</span>/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
*/
String fileName = GetFileName(context, uri);
File downFile = new File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads), "/" + fileName);
return downFile.AbsolutePath;
}
// MediaProvider
else if (IsMediaDocument(uri))
{
String docId = DocumentsContract.GetDocumentId(uri);
String[] split = docId.Split(":");
String type = split[0];
Android.Net.Uri contentUri = null;
if ("image".Equals(type))
{
contentUri = MediaStore.Images.Media.ExternalContentUri;
}
else if ("video".Equals(type))
{
contentUri = MediaStore.Video.Media.ExternalContentUri;
}
else if ("audio".Equals(type))
{
contentUri = MediaStore.Audio.Media.ExternalContentUri;
}
String selection = "_id=?";
String[] selectionArgs = new String[] {
split[1]
};
return GetDataColumn(context, contentUri, selection, selectionArgs);
}
}
// MediaStore (and general)
else if ("content".Equals(uri.Scheme, StringComparison.InvariantCultureIgnoreCase))
{
// Return the remote address
if (IsGooglePhotosUri(uri))
return uri.LastPathSegment;
return GetDataColumn(context, uri, null, null);
}
// File
else if ("file".Equals(uri.Scheme, StringComparison.InvariantCultureIgnoreCase))
{
return uri.Path;
}
return null;
}
/**
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context The context.
* @param uri The Uri to query.
* @param selection (Optional) Filter used in the query.
* @param selectionArgs (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/
public static String GetDataColumn(Context context, Android.Net.Uri uri, String selection,
String[] selectionArgs)
{
ICursor cursor = null;
String column = "_data";
String[] projection = {
column
};
try
{
cursor = context.ContentResolver.Query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.MoveToFirst())
{
int index = cursor.GetColumnIndexOrThrow(column);
return cursor.GetString(index);
}
}
finally
{
if (cursor != null)
cursor.Close();
}
return null;
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public
static bool IsExternalStorageDocument(Android.Net.Uri uri)
{
return "com.android.externalstorage.documents".Equals(uri.Authority);
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
public static bool IsDownloadsDocument(Android.Net.Uri uri)
{
return "com.android.providers.downloads.documents".Equals(uri.Authority);
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
public static bool IsMediaDocument(Android.Net.Uri uri)
{
return "com.android.providers.media.documents".Equals(uri.Authority);
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is Google <span id="IL_AD8" class="IL_AD">Photos</span>.
*/
public static bool IsGooglePhotosUri(Android.Net.Uri uri)
{
return "com.google.android.apps.photos.content".Equals(uri.Authority);
}
}
}