2015-03-26 3 views
0

Надеюсь, кто-то может мне помочь.Заполнить список просмотров видеофайлами на KitKat

Я показываю на своем приложении все записанные видеофайлы, расположенные на SD-карте, через listView. Но это не работает с Api 19 (KitKat) .my код это:

String selection = MediaStore.Video.Media.DATA + " like?";  
String[] selectionArgs = new String[]{"%"+ VideoRoute + "%"}; 
videocursor = activity.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,proj, selection, selectionArgs, MediaStore.Video.Media.DATE_TAKEN + "DESC"); 
count = videocursor.getCount(); 

while (videocursor.moveToNext()){  
    ...  
Bitmap bmThumbnail = ThumbnailUtils.createVideoThumbnail(video.getUrlMedia(), Thumbnails.MICRO_KIND);  
... 
} 

Кто-нибудь знает, как добиться этого с Android KitKat?

Заранее спасибо.

+0

Пожалуйста, опишите более подробно, как ваш код «делает не работа". Это крушение? Он просто не заполняет список? Не удается ли его скомпилировать? – Sildoreth

+0

Он просто не заполняет список, видеокурсор пуст, счет 0, так как на SD-карте нет ничего видеофайла. – RoseBM

ответ

0

я выложу свой ответ, в случае, если кто-то нуждается в помощи, как мне с этим вопросом, что работает для меня:

//with videoList fill de listView 
videoList = getFilesKitkat(); 

public List<Video> getFilesKitkat(){ 
    int i = 0; 
    list.clear();//list is global 

    //App package directory in the sd card to get all the files, 
    // in my case, there is only mp4 files. 
    // /storage/extSdCard/Android/data/<package_name>/files... 
    File targetDirector = new File (videosPath); 

    File[] files = targetDirector.listFiles(); 
    int totalFiles = files.length; 
    String[] filesToScan = new String[totalFiles]; 

    //this is to get all the paths in order to pass them to MediaScannerConnection 
    for (File file : files){  
     filesToScan[i] = file.getAbsolutePath(); 
     i++; 
    } 
    callMediaScanner_kitkat(filesToScan); 

    return list; 
} 

public void callMediaScanner_kitkat(final String[] files) { 
    MediaScannerConnection.scanFile(context, files, null, 
      new MediaScannerConnection.OnScanCompletedListener() { 
     @Override 
     public void onScanCompleted(String path, Uri uri) { 
      // TODO Auto-generated method stub 
      Log.i("Test", "Scanned " + path); 
      getVideosList_kitkat(context, uri); 
     } 
    }); 
} 

public void getVideosList_kitkat(Context context, Uri contentUri) { 
     Cursor cursor = null; 
     try { 
      String[] proj = { MediaStore.Video.Media._ID, 
       MediaStore.Video.Media.DATA, 
       MediaStore.Video.Media.DISPLAY_NAME, 
       MediaStore.Video.Media.SIZE, 
       MediaStore.Video.Media.TITLE, 
       MediaStore.Video.Media.DATE_MODIFIED}; 
     cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 

     while (cursor.moveToNext()){ 
       Video video = new Video(); 

       int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
       int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media._ID)); 
       String nombre = (cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE))).toLowerCase(); 
       video.setName(nombre + XSalesApplication.getActivityContext().getResources().getString(R.string.video_extension)); 
       video.setId(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID))); 
       video.setSize(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE))); 
       video.setUrlMedia(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)));  video.setlastModified(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATE_MODIFIED))); 

       Bitmap bmThumbnail = ThumbnailUtils.createVideoThumbnail(video.getUrlMedia(), Thumbnails.MICRO_KIND); 
       video.setPhotoBitmap(bmThumbnail); 

       list.add(video); 
     } 

     } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
     } 
    } 
0

Прежде чем KitKat, общедоступные API-интерфейсы поддерживают только одно первичное внешнее запоминающее устройство, которое на некоторых устройствах может эмулироваться и поддерживаться внутренним хранилищем. Первичные внешние устройства хранения продолжают работать так, как всегда, с уровня API 1; если вы запрашиваете WRITE_EXTERNAL_STORAGE, у вас есть полный доступ для чтения/записи на всем этом устройстве.

Для дополнительных внешних устройств хранения в KitKat существует ограниченный доступ для записи в каталоги, принадлежащие запущенному приложению.

преимущества-

1: приложения могут воспользоваться дополнительным пространством для хранения.

2: пользователи имеют лучшую видимость и контроль над тем, как приложения используют свое пространство для хранения. (Эти каталоги конкретных пакетов отображаются в приложениях через Context.getExternalFilesDirs() и т. Д.)

Таким образом, ваш код может указывать нулевое количество найденных видео.

+0

Правильно, из-за этой проблемы эти видеофайлы хранятся в SD-карте внутри каталога пакета приложения, а url is/storage/extSdCard/Android/data//files /, но все еще не находит видеофайл. – RoseBM

 Смежные вопросы

  • Нет связанных вопросов^_^