2016-10-13 3 views
0
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode == RESULT_OK) { 

     String FilePath = data.getData().getPath(); 
     Log.e("filepath",String.valueOf(FilePath)); 
     String FileName = data.getData().getLastPathSegment(); 

     Toast toast = Toast.makeText(this, FilePath, Toast.LENGTH_LONG); 
     toast.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL, 0, 
         0); 
    } 
} 

мне нужно получить имя файла, как /video.mp4, но я получаю /35370Получение имени файла в целочисленном формате

подводит как этот E/FilePath:/внешние/видео/СМИ/35424 , но я хочу, как это E/путь_к_файл: /external/video/media/video.mp4

Пожалуйста, дайте мне некоторые правильные предложения я сделал все изменения, видя другие посты

Logcat:

10-13 12:25:34.818 15662-15662/com.onnurinet.andriodstb D/dalvikvm: VFY: replacing opcode 0x6f at 0x0000 
10-13 12:25:40.366 15662-15662/com.onnurinet.andriodstb E/filepath: /external/video/media/35370 
10-13 12:25:40.379 15662-15662/com.onnurinet.andriodstb D/string: 35370 
10-13 12:25:40.721 15662-15662/com.onnurinet.andriodstb D/dalvikvm: Trying to load lib /data/app-lib/com.onnurinet.andriodstb-2/libvlcjni.so 0x4190f130 
10-13 12:25:40.722 15662-15662/com.onnurinet.andriodstb W/linker: libvlcjni.so has text relocations. This is wasting memory and is a security risk. Please fix. 
10-13 12:25:40.740 15662-15662/com.onnurinet.andriodstb D/dalvikvm: Added shared lib /data/app-lib/com.onnurinet.andriodstb-2/libvlcjni.so 0x4190f130 
10-13 12:25:40.740 15662-15662/com.onnurinet.andriodstb D/VLC/JNI/main: JNI interface loaded. 
+0

Что версия ОС вы пытаетесь это? –

+0

kitkat версия, но в lollipop 5.1.1 его работа – Mounika

+0

где вы держите этот файл? –

ответ

0
final Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI); 
     intent.setType("video/*"); 
     startActivityForResult(intent, 152); 



    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (resultCode == getActivity().RESULT_OK) { 
       if (requestCode == 152) { 
         final Uri uriVideoFromGalleryPath = data.getData(); 
         final String selectedMediaPath =getPath(this, uriVideoFromGalleryPath); 
Toast toast = Toast.makeText(this, selectedMediaPath , Toast.LENGTH_LONG); 

    }} 

// добавить этот метод вне OnCreate().

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]; 
      } 

      // TODO handle non-primary volumes 
     } 
     // 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 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 column_index = cursor.getColumnIndexOrThrow(column); 
      return cursor.getString(column_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()); 
} 
+0

am get error at не может изменить контекст символа и данные – Mounika

+0

контекст означает ваш getApplicationContext(), если вы используете активность, а если фрагмент, то используйте getActivity(); –

+0

ok, тогда для данных – Mounika

0

Попробуйте это:

Путь вернулся из намерения отличается KitKat и леденец. Не могли бы вы попробовать это в KitKat?

public String getVideoPathFromURI(Context context, Uri uri){ 

    String filePath = ""; 

    String wholeID = DocumentsContract.getDocumentId(uri); 

    String id = wholeID.split(":")[1]; 

    String[] column = { MediaStore.Images.Media.DATA }; 

    String sel = MediaStore.Images.Media._ID + "=?"; 

    Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      column, sel, new String[]{ id }, null); 

    if(cursor != null) { 
     int columnIndex = cursor.getColumnIndex(column[0]); 

     if (cursor.moveToFirst()) { 
      filePath = cursor.getString(columnIndex); 
     } 
     cursor.close(); 
    } 
    return filePath; 
} 
+1

Почему? Не могли бы вы объяснить, а не просто бросать код на его лицо, пожалуйста. – AxelH

+0

проверить обновленное сообщение – Mounika

+0

метод вызова в onActivityResult, но приложение получает сбой – Mounika

0

Попробуйте это:

private String getRealPathFromURI(Uri contentURI) { 
    String result; 
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
    if (cursor == null) { // Source is Dropbox or other similar local file path 
     result = contentURI.getPath(); 
    } else { 
     cursor.moveToFirst(); 
     int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
     result = cursor.getString(idx); 
     cursor.close(); 
    } 
    return result; 
} 
Смежные вопросы