android - How to query file path from mediastore?or how can i query for artist image from mediastore? -
i new mediastore.i making android app,and wanted know how can fetch file path mediastore?or artist image? using mediametadataretriever earlier instead of mediastore,and making own database,it worked fine,but used lag 3 secs,and no 1 wants that. below code irrelevant question have asked,but posting because people in habit here of down voting if no code has been posted... package sourcecode.jazzplayer;
import java.io.file; import java.io.filefilter; import java.io.fileoutputstream; import java.io.objectoutputstream; import java.io.serializable; import java.util.arraylist; import com.nostra13.universalimageloader.core.imageloader; import com.nostra13.universalimageloader.core.imageloaderconfiguration; import sourcecode.jazzplayer.r; import android.app.activity; import android.content.context; import android.content.intent; import android.content.pm.activityinfo; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.media.mediametadataretriever; import android.os.asynctask; import android.os.bundle; import android.os.environment; import android.support.v4.app.fragment; import android.util.typedvalue; import android.view.contextmenu; import android.view.contextmenu.contextmenuinfo; import android.view.layoutinflater; import android.view.menu; import android.view.menuitem; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.adapterview.adaptercontextmenuinfo; import android.widget.adapterview.onitemclicklistener; import android.widget.listview; public class fragmentsongs extends fragment implements serializable{ listview snglist; arraylist<songdetails> songinfo=null; adapterview.adaptercontextmenuinfo info; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { viewgroup view = (viewgroup) inflater.inflate(r.layout.fragment_song, null); snglist = (listview) view.findviewbyid(r.id.songlist); registerforcontextmenu(snglist); //file f=new file(environment.getexternalstoragedirectory()+"/music"); //file f=new file(environment.getexternalstoragedirectory()+"/musicz"); file f=new file("/system/"); //file f=new file("/storage/extsdcard/my music/"); int j=0;int i=0; getactivity().setrequestedorientation(activityinfo.screen_orientation_portrait); songinfo = getsongsfromdirectory(f); //sorting done below if (songinfo.size()>0) { for( j=0; j<songinfo.size();j++) { ( i=j+1 ; i<songinfo.size(); i++) { songdetails a=songinfo.get(i); songdetails b=songinfo.get(j); if(a.getsong().tolowercase().compareto(b.getsong().tolowercase())<0) { songinfo.set(i,b ); songinfo.set(j,a); } } } //starting new activity playing music snglist.setonitemclicklistener(new onitemclicklistener() { public void onitemclick(adapterview a, view v, int position, long id) { intent intent = new intent(getactivity(), nowplaying.class); intent.putparcelablearraylistextra("data1",songinfo); intent.putextra("data2",position); startactivity(intent); } }); snglist.setadapter(new customadapter(songinfo)); return view; } else return null; } onfragmentcreatedlistener listener; @override public void onstart() { super.onstart(); try { listener = (onfragmentcreatedlistener) getactivity(); listener.onfragmentcreated(songinfo); } catch (classcastexception e) { throw new classcastexception(getactivity().tostring() + " must implement onfragmentcreated"); } } public arraylist<songdetails> getsongsfromdirectory(file f) { //mediametadataretriever mmr = new mediametadataretriever(); arraylist<songdetails> songs = new arraylist<songdetails>(); // bitmap bitmap2; bitmap bmp = bitmapfactory.decoderesource(getresources(), r.drawable.ab); float ht_px = typedvalue.applydimension(typedvalue.complex_unit_dip, 100, getresources().getdisplaymetrics()); float wt_px = typedvalue.applydimension(typedvalue.complex_unit_dip, 100, getresources().getdisplaymetrics()); bitmap bitmap3 = bitmap.createscaledbitmap(bmp, (int) ht_px, (int) wt_px, true); //byte[] rawart = null; bitmap art; //bitmapfactory.options bfo=new bitmapfactory.options(); if (!f.exists() || !f.isdirectory()) { return songs; } file[] files = f.listfiles(new mp3filter()); for(int i=0; i<files.length; i++) { if (files[i].isfile()) { // mmr.setdatasource(files[i].getpath()); //rawart = mmr.getembeddedpicture(); songdetails detail=new songdetails(); //if ( rawart != null) { //bitmap2=bitmapfactory.decodebytearray(rawart, 0, rawart.length, bfo); //bitmap2 = bitmap.createscaledbitmap(bitmap2, (int) ht_px, (int) wt_px, true); //detail.seticon(bitmap2); }//else { detail.seticon(bitmap3); } detail.setsong(files[i].getname()); // detail.setartist(mmr.extractmetadata(mediametadataretriever.metadata_key_artist)); // if (mmr.extractmetadata(mediametadataretriever.metadata_key_artist)==null||(mmr.extractmetadata(mediametadataretriever.metadata_key_artist)=="")) { detail.setartist("unknow artist"); } // detail.setalbum(mmr.extractmetadata(mediametadataretriever.metadata_key_album)); // if (mmr.extractmetadata(mediametadataretriever.metadata_key_album)==null||mmr.extractmetadata(mediametadataretriever.metadata_key_album)=="") { detail.setalbum("unknow album"); } detail.setpath2( files[i].getpath()) ; songs.add(detail); } else if (files[i].isdirectory()) { songs.addall(getsongsfromdirectory(files[i])); } } return songs; } @override public void oncreatecontextmenu(contextmenu menu, view v, contextmenuinfo menuinfo) { super.oncreatecontextmenu(menu, v, menuinfo); info = (adaptercontextmenuinfo) menuinfo; menu.add(menu.none, v.getid(), 0, "play"); menu.add(menu.none, v.getid(), 0, "delete"); menu.add(menu.none, v.getid(), 0, "queue item"); } @override public boolean oncontextitemselected(menuitem item) { if (item.gettitle() == "play") { } else if (item.gettitle() == "delete") { } else if (item.gettitle() == "queue item") { } else { return false; } return true; } public interface onfragmentcreatedlistener { public void onfragmentcreated(arraylist<songdetails> msg); } } class mp3filter implements filefilter { public boolean accept(file file) { return (file.isdirectory()||file.getname().endswith(".prop")|| file.getname().endswith(".mp3")||file.getname().endswith(".wma")||file.getname().endswith(".wma")||file.getname().endswith(".wma")||file.getname().endswith(".mp4")); } }
i think you're asking "how find path file scanned media scanner , adding mediastore content provider?"
the important column mediastore.mediacolumns.data. when file added mediastore, file name including path stored in data column. should able go information have image data column, read file name, , path.
Comments
Post a Comment