Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从mediastore查询文件路径?或者如何从mediastore查询艺术家图像?_Android_Android Mediaplayer_Mediastore - Fatal编程技术网

Android 如何从mediastore查询文件路径?或者如何从mediastore查询艺术家图像?

Android 如何从mediastore查询文件路径?或者如何从mediastore查询艺术家图像?,android,android-mediaplayer,mediastore,Android,Android Mediaplayer,Mediastore,我是mediastore的新手。我正在制作一个android应用程序,我想知道如何从mediastore获取文件路径?或者艺术家图像? 我之前使用的是mediametadataretriever而不是mediastore,当时我正在构建自己的数据库,它工作得很好,但它过去会延迟3秒,没有人希望这样。 下面是与我所问问题无关的代码,但我之所以发布它,是因为这里的人们习惯于在没有代码发布的情况下进行向下投票。。。 包sourcecode.jazzplayer import java.io.File;

我是mediastore的新手。我正在制作一个android应用程序,我想知道如何从mediastore获取文件路径?或者艺术家图像? 我之前使用的是mediametadataretriever而不是mediastore,当时我正在构建自己的数据库,它工作得很好,但它过去会延迟3秒,没有人希望这样。 下面是与我所问问题无关的代码,但我之所以发布它,是因为这里的人们习惯于在没有代码发布的情况下进行向下投票。。。 包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++)
            {
                for ( 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 a new activity for playing the 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"));
            }
        }
导入java.io.File;
导入java.io.FileFilter;
导入java.io.FileOutputStream;
导入java.io.ObjectOutputStream;
导入java.io.Serializable;
导入java.util.ArrayList;
导入com.nostra13.universalimageloader.core.ImageLoader;
导入com.nostra13.universialimageloader.core.imageloader配置;
导入sourcecode.jazzplayer.R;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.content.pm.ActivityInfo;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.media.MediaMetadataRetriever;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.os.Environment;
导入android.support.v4.app.Fragment;
导入android.util.TypedValue;
导入android.view.ContextMenu;
导入android.view.ContextMenu.ContextMenuInfo;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.AdapterView.AdapterContextMenuInfo;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListView;
公共类FragmentSongs扩展片段实现可序列化{
列表视图SngList;
ArrayList Songinfo=null;
AdapterView.AdapterContextMenuInfo信息;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState)
{
视图组视图=(视图组)充气器。充气(R.layout.fragment\u song,null);
SngList=(ListView)view.findViewById(R.id.SongList);
registerForContextMenu(SngList);
//文件f=新文件(Environment.getExternalStorageDirectory()+“/Music”);
//文件f=新文件(Environment.getExternalStorageDirectory()+“/musicz”);
文件f=新文件(“/system/”);
//文件f=新文件(“/storage/extSdCard/My Music/”);
int j=0;int i=0;
getActivity().setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Grait);
Songinfo=getSongsFromDirectory(f);
//分类如下
如果(Songinfo.size()>0)
{
对于(j=0;j我想您是在问“如何找到媒体扫描仪扫描并添加到MediaStore内容提供商的文件的路径?”


重要的一列是。将文件添加到MediaStore时,文件名(包括其路径)存储在数据列中。您应该能够从图像的信息转到数据列,读取文件名,然后从中获取其路径。

这是您在.DATA列中找到的内容

/mnt/storage/Music/Audioslave/Audioslave-Live_In_Cuba/01-Audioslave-set_it_off.mp3

/mnt/storage/Music/Audioslave/Audioslave-Live\u In\u Cuba/02-Audioslave-your\u time\u has\u come.mp3

/mnt/storage/Music/Audioslave/Audioslave-Live__Cuba/03-Audioslave-like_a_stone.mp3

它保存完整路径和trackname。 实际上,你可以通过从avd中取出数据库来查看它。保存到你的PC,并使用基于PC的产品(如RazorSQL)打开。一旦连接,你可以运行查询等。这对我帮助很大

如果您想购买我的应用程序,请访问Google Play并搜索播放列表管理器 或参观

是的,这就是我要问的……但是你能详细说明你的答案吗?我仍然无法从“……数据”中获取文件路径?你的意思是“MediaStore.MediaColumns.DATA”只包含文件路径??Lol,add.Anyways thanx.+1,我接受你的答案