【问题标题】:View audio in specific folder查看特定文件夹中的音频
【发布时间】:2013-12-21 23:11:35
【问题描述】:

我想查看 sd 卡中特定文件夹的声音。文件夹名称为“录音机”。我可以查看 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;
         }

}

}

【问题讨论】:

    标签: android audio media


    【解决方案1】:

    第一件事。不要使用managedQuery(....),因为它已被弃用。 使用getContentResolver().query(....),其参数与managedQuery(...)相同

    第二件事,您需要在您的getContentResolver().query(.....) 中添加WHERE CLAUSE

    这将是你的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();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多