2013-12-21 5 views
0

Я хочу просмотреть звуки в конкретной папке на SD-карте. Папки называются «Audiorecorder». Я могу просмотреть все рекордеры в SD-карте. Но я хочу просмотреть только аудио в папках. Я использовал эти коды. Пожалуйста, помогите мне.Просмотр аудио в определенной папке

package com.example.seskaydedici; 
import android.app.Activity; 
import android.content.Context; 
import android.database.Cursor; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class listelesinifi extends Activity { 

    ListView musiclist; 
    Cursor musiccursor; 
    int music_column_index; 
    int count; 
    MediaPlayer mMediaPlayer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listele); 
     init_phone_music_grid(); 

    } 


    private void init_phone_music_grid() { 
     System.gc(); 
     String[] proj = { MediaStore.Audio.Media._ID, 
MediaStore.Audio.Media.DATA, 
MediaStore.Audio.Media.DISPLAY_NAME, 
MediaStore.Video.Media.SIZE }; 
     musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
proj, null, null, null); 
     count = musiccursor.getCount(); 
     musiclist = (ListView) findViewById(R.id.listView1); 
     musiclist.setAdapter(new MusicAdapter(getApplicationContext())); 

     musiclist.setOnItemClickListener(musicgridlistener); 
     mMediaPlayer = new MediaPlayer(); 
    } 

    private OnItemClickListener musicgridlistener = new OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, 
long id) { 
       System.gc(); 
       music_column_index = musiccursor 
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
       musiccursor.moveToPosition(position); 
       String filename = musiccursor.getString(music_column_index); 

       try { 
        if (mMediaPlayer.isPlaying()) { 
          mMediaPlayer.reset(); 
        } 
        mMediaPlayer.setDataSource(filename); 
        mMediaPlayer.prepare(); 
        mMediaPlayer.start(); 
       } catch (Exception e) { 

       } 
     } 
    }; 

    public class MusicAdapter extends BaseAdapter { 
     private Context mContext; 

     public MusicAdapter(Context c) { 
       mContext = c; 
     } 

     public int getCount() { 
       return count; 
     } 

     public Object getItem(int position) { 
       return position; 
     } 

     public long getItemId(int position) { 
       return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
       System.gc(); 
       TextView tv = new TextView(mContext.getApplicationContext()); 
       String id = null; 
       if (convertView == null) { 
        music_column_index = musiccursor 
.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME); 
        musiccursor.moveToPosition(position); 
        id = musiccursor.getString(music_column_index); 
        music_column_index = musiccursor 
.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE); 
        musiccursor.moveToPosition(position); 
        id += " Size(KB):" + musiccursor.getString(music_column_index); 
        tv.setText(id); 
       } else 
        tv = (TextView) convertView; 
       return tv; 
     } 

} 

} 

ответ

3

Первое, что нужно. Не используйте managedQuery(....), поскольку он устарел. Использование getContentResolver().query(....), которые принимают те же параметры, как managedQuery(...)

Вторая вещь, вам нужно добавить WHERE CLAUSE в вашем getContentResolver().query(.....).

Это будет ваш WHERE CLAUSE:

String path = Environment.getExternalStorageDirectory().getPath(); 

    String selection = MediaStore.Audio.Media.IS_MUSIC + " !=" + 0 
      + " AND " + MediaStore.Audio.Media.DATA + " LIKE '" + path 
      + "/YourFolderNameHere/%'"; 

Просто замените YourFolderNameHere с именем папки в SD карту, с которой вы хотите сканировать аудио.

Так что ваш окончательный код будет:

private void init_phone_music_grid() { 
     System.gc(); 
     String path = Environment.getExternalStorageDirectory().getPath(); 

     String selection = MediaStore.Audio.Media.IS_MUSIC + " !=" + 0 
       + " AND " + MediaStore.Audio.Media.DATA + " LIKE '" + path 
       + "/YourFolderNameHere/%'"; 
     String[] proj = { MediaStore.Audio.Media._ID, 
       MediaStore.Audio.Media.DATA, 
       MediaStore.Audio.Media.DISPLAY_NAME, 
       MediaStore.Audio.Media.SIZE }; 
     musiccursor = this.getContentResolver().query(
       MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, selection, 
       null, null); 
     count = musiccursor.getCount(); 
     musiclist = (ListView) findViewById(R.id.listView1); 
     musiclist.setAdapter(new MusicAdapter(getApplicationContext())); 

     musiclist.setOnItemClickListener(musicgridlistener); 
     mMediaPlayer = new MediaPlayer(); 
    } 
+0

спасибо. Это хорошо работает для меня! –

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