Sameera Abubaker نشر 2 سبتمبر 2020 أرسل تقرير نشر 2 سبتمبر 2020 السلام عليكم انا مبتدئة في البرمجة باستخدام الاندرويد ستوديو وقد بحثث مطولا عن كيفية الحصول على مسار الملف الذي تم اختياره في الهاتف باستعمال الكود التالي : import android.annotation.TargetApi; import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.provider.DocumentsContract; import android.provider.MediaStore; public class GetFilePathFromDevice { /** * Get file path from URI * * @param context context of Activity * @param uri uri of file * @return path of given URI */ @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://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); } // 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; } 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; } public static boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); } public static boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri.getAuthority()); } public static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); } public static boolean isGooglePhotosUri(Uri uri) { return "com.google.android.apps.photos.content".equals(uri.getAuthority()); } } ولكن هذا الكود وللاسف يرجع null في حال اخترت ملف من الذاكرة الخارجية فارجو من لديه التعديل المناسب ان يقترحه وشكرا 1 اقتباس
0 Mohamd Imran نشر 3 سبتمبر 2020 أرسل تقرير نشر 3 سبتمبر 2020 مرحباً @Sameera Abubaker يوجد العديد من الفنشكنز في الكود الخاص بك ,أين يتم إرجاع null ؟ إذا أمكن أرفاق الخطأ كامل الذي يظهر لك حتى أستطيع المساعدة يمكنك إرفاق ال LogCat هنا ,أو ذِكر ما نوع الملف الذي تريدين إختياره هل هو صورة ؟وأين موجود ذلك الملف هل في الذاكرة الخارجية أم الداخلية ؟ 1 اقتباس
0 Sameera Abubaker نشر 3 سبتمبر 2020 الكاتب أرسل تقرير نشر 3 سبتمبر 2020 بتاريخ 2 ساعات قال Mohamd Imran: مرحباً @Sameera Abubaker يوجد العديد من الفنشكنز في الكود الخاص بك ,أين يتم إرجاع null ؟ إذا أمكن أرفاق الخطأ كامل الذي يظهر لك حتى أستطيع المساعدة يمكنك إرفاق ال LogCat هنا ,أو ذِكر ما نوع الملف الذي تريدين إختياره هل هو صورة ؟وأين موجود ذلك الملف هل في الذاكرة الخارجية أم الداخلية ؟ باستخدم الدالة getPath وبمرر من خلالها uri للملف من الذاكرة الخارجية ايا كان نوعه لمايكون من الصور او الفيدوهات او الصوت يعطي المسار كويس لكن لما نحدده من external storage وندخل على اي مجلد ونختار اي ملف يرجع null 1 اقتباس
0 Mohamd Imran نشر 4 سبتمبر 2020 أرسل تقرير نشر 4 سبتمبر 2020 بتاريخ 17 ساعات قال Sameera Abubaker: لمايكون من الصور او الفيدوهات او الصوت يعطي المسار كويس لكن لما نحدده من external storage وندخل على اي مجلد ونختار اي ملف يرجع null اه تمام,يمكنك القيام بذلك ببساطة هكذا // نقوم بعمل Uri من الملفات على الذاكرة الخارجية File externalFile = new File(Environment.getExternalStorageDirectory(), "file.text"); Uri external = Uri.fromFile(externalFile); وأعلميني بالنتيجة اقتباس
0 Sameera Abubaker نشر 9 سبتمبر 2020 الكاتب أرسل تقرير نشر 9 سبتمبر 2020 بتاريخ On 9/4/2020 at 08:26 قال Mohamd Imran: اه تمام,يمكنك القيام بذلك ببساطة هكذا // نقوم بعمل Uri من الملفات على الذاكرة الخارجية File externalFile = new File(Environment.getExternalStorageDirectory(), "file.text"); Uri external = Uri.fromFile(externalFile); وأعلميني بالنتيجة اين نضيف هذا الكود ؟؟؟ للاسف انا مبتدأة في الاندرويد ستوديو اقتباس
السؤال
Sameera Abubaker
السلام عليكم
انا مبتدئة في البرمجة باستخدام الاندرويد ستوديو وقد بحثث مطولا عن كيفية الحصول على مسار الملف الذي تم اختياره في الهاتف باستعمال الكود التالي :
ولكن هذا الكود وللاسف يرجع null في حال اخترت ملف من الذاكرة الخارجية فارجو من لديه التعديل المناسب ان يقترحه وشكرا
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.