使用MetaDataRetriver Android在listview上显示文件

使用MetaDataRetriver Android在listview上显示文件,android,listview,android-listview,Android,Listview,Android Listview,下面的活动有一个edittext和一个搜索下载目录文件的按钮, 当我单击该按钮时,会在列表视图中按标题显示mp3文件。现在的问题是,我不需要编辑文本和搜索按钮,我只希望在活动启动时显示listview。我怎样才能做到这一点 import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.app.Activity; import andr

下面的活动有一个edittext和一个搜索下载目录文件的按钮, 当我单击该按钮时,会在列表视图中按标题显示mp3文件。现在的问题是,我不需要编辑文本和搜索按钮,我只希望在活动启动时显示listview。我怎样才能做到这一点

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class DirMusic extends Activity {
    ListView listSongs;
    ArrayList<Song> songs;
    EditText editTitle;
    File musicFolder;
    LinearLayout songsView;

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        // search for songs on restore
        searchSongs(null);  
    }

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        setContentView(R.layout.activity_dir_music);

        // get the list of files and place them in ListView
        listSongs = (ListView) this.findViewById(R.id.listSongs);
        editTitle = (EditText) this.findViewById(R.id.editTitle);
        songsView = (LinearLayout) this.findViewById(R.id.songsView);
//      songsView.setVisibility(View.INVISIBLE);
//      songsView.setVisibility(View.VISIBLE);

        musicFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        listSongs.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> view, View item,
                    int position, long id) {

                // Play song using  built-in audio player 
                String filename = songs.get(position).getFilename();
                Uri audio = Uri.parse("file://" + musicFolder + "/" + filename);
                Intent intent = new Intent( Intent.ACTION_VIEW);
                intent.setDataAndType(audio, "audio/*");  
                startActivity(intent);
            }
        });
    }

    public void searchSongs(View v) {
        bindSongsToListView(musicFolder,  editTitle.getText().toString());
        if ( songs.size() > 0 )
            songsView.setVisibility(View.VISIBLE);
        else
            songsView.setVisibility(View.INVISIBLE);

    }

    private  void bindSongsToListView(File musicFolder, String title) {
        songs = new ArrayList<Song>();

        ArrayList<Map<String,String>> songsMap = new ArrayList<Map<String,String>>();

        for (File f : musicFolder.listFiles()) {
            // get MediaMetaData
            MediaMetadataRetriever md = new MediaMetadataRetriever();
            md.setDataSource(musicFolder + "/" + f.getName());
            int secs = Integer.parseInt(md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)) / 1000;
            int mins= secs / 60;
            secs =  secs % 60;
            String singer = md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
            if ( singer == null || singer.equals(""))
                  singer = "getSinger";
            String songtitle  = md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
            if ( songtitle == null )
                   songtitle = f.getName();
            String duration = String.format("%02d:%02d", mins,secs);

            if (songtitle.toUpperCase().contains(title.toUpperCase())) {
                Song s = new Song();
                s.setTitle(songtitle);
                s.setFilename(f.getName());
                s.setDuration(duration);
                s.setSinger(singer);
                songs.add(s);

                Map<String, String> mapobject = convertSongToMap(s);
                songsMap.add(mapobject);
            }

        }

        SimpleAdapter adapter = new SimpleAdapter(this, songsMap, R.layout.song,
                    new String[] { "title","duration","singer"},
                     new int[] {  R.id.textTitle, R.id.textDuration, R.id.textSinger} );

        listSongs.setAdapter(adapter);
    }

    public Map<String,String> convertSongToMap(Song s) {

        HashMap<String, String> map = new HashMap<String,String>();
        map.put("title", s.getTitle());
        map.put("duration", s.getDuration());
        map.put("singer", s.getSinger());
        return map;

    }
}
导入java.io.File;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Map;
导入android.app.Activity;
导入android.content.Intent;
导入android.media.MediaMetadataRetriever;
导入android.net.Uri;
导入android.os.Bundle;
导入android.os.Environment;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.EditText;
导入android.widget.LinearLayout;
导入android.widget.ListView;
导入android.widget.simpledapter;
公共课堂音乐拓展活动{
列表视图列表歌曲;
雅乐歌曲;
编辑文本编辑标题;
文件音乐文件夹;
线性布局songsView;
@凌驾
RestoreInstanceState上的受保护无效(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
//恢复时搜索歌曲
搜索歌曲(空);
}
@凌驾
创建时的公共void(捆绑状态){
super.onCreate(state);
setContentView(R.layout.activity\u dir\u music);
//获取文件列表并将其放置在ListView中
listSongs=(ListView)this.findViewById(R.id.listSongs);
editTitle=(EditText)this.findViewById(R.id.editTitle);
songsView=(LinearLayout)this.findviewbyd(R.id.songsView);
//songsView.setVisibility(View.INVISIBLE);
//设置可见性(View.VISIBLE);
musicFolder=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共控件单击(AdapterView视图、视图项、,
内部位置,长id){
//使用内置音频播放器播放歌曲
String filename=songs.get(position.getFilename();
uriaudio=Uri.parse(“文件:/”+musicFolder+“/”+filename);
意向意向=新意向(意向.行动\视图);
intent.setDataAndType(音频,“音频/*”);
星触觉(意向);
}
});
}
公共歌曲(视图五){
bindSongsToListView(musicFolder,editTitle.getText().toString());
如果(songs.size()>0)
设置可见性(View.VISIBLE);
其他的
songsView.setVisibility(View.INVISIBLE);
}
私有void bindSongsToListView(文件musicFolder,字符串标题){
歌曲=新的ArrayList();
ArrayList songsMap=新的ArrayList();
对于(文件f:musicFolder.listFiles()){
//获取媒体元数据
MediaMetadataRetriever md=新的MediaMetadataRetriever();
md.setDataSource(musicFolder+“/”+f.getName());
int secs=Integer.parseInt(md.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u DURATION))/1000;
整数分钟=秒/60;
秒=秒%60;
String singer=md.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u ARTIST);
if(singer==null | | singer.equals(“”)
singer=“getSinger”;
String songtitle=md.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u TITLE);
如果(songtitle==null)
songtitle=f.getName();
字符串持续时间=String.format(“%02d:%02d”,分,秒);
如果(songtitle.toUpperCase().contains(title.toUpperCase())){
歌曲s=新歌();
s、 片名(歌曲名);
s、 setFilename(f.getName());
s、 设置持续时间(持续时间);
s、 塞辛格(歌手);
歌曲。添加(s);
Map mapobject=convertSongToMap;
songsMap.add(mapobject);
}
}
simpledapter adapter=新的simpledapter(this,songsMap,R.layout.song,
新字符串[]{“标题”、“持续时间”、“歌手”},
新的int[]{R.id.textTitle,R.id.textDuration,R.id.textSinger});
setAdapter(适配器);
}
公共地图转换宋图(宋s){
HashMap=newHashMap();
map.put(“title”,s.getTitle());
map.put(“duration”,s.getDuration());
map.put(“singer”,s.getSinger());
返回图;
}
}

在onCreate with SdCard目录中调用bindSongsToListView,不按标题过滤我已经尝试了所有方法,但如果我删除searchSongs按钮和edittext,则调用此onCreate bindSongsToListView(musicFolder);设置可见性(View.VISIBLE);不给出错误,但根本不显示歌曲列表