媒体播放器音乐导入

时间:2014-11-05 05:21:32

标签: android file-io

我正在尝试创建一个媒体播放器,将我的所有歌曲设置在主屏幕上的播放列表中。 实际上有两件事我无法弄清楚。第一个是,如何让应用程序自动从android设备中的文件夹更新播放列表。 显然,我的应用程序没有向我显示我为播放列表创建的ListView中的任何内容。

我尝试使用以下代码实现它:

           play = (Button)findViewById(R.id.play);
           play.setOnTouchListener(new OnTouchListener() {
            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent event) {
             // show interest in events resulting from ACTION_DOWN
             if(event.getAction()==MotionEvent.ACTION_DOWN) return true;
             // don't handle event unless its ACTION_UP so "doSomething()" only runs once.
             if(event.getAction()!=MotionEvent.ACTION_UP) return false;
            // doSomething();


             play.setPressed( !play.isPressed() );
             if(play.isPressed()==true){
                 //mp=MediaPlayer.create(Splash.this , R.raw.cia);
                 mp.start();}
             else {mp.stop();}
             return true;
            }
            }); 

我还创建了一个更新我的播放列表的函数,但是,当我尝试执行它时,它给了我一个错误,不幸的是程序已经停止。

private void updatePlaylist(){ 
  File mus = new File(SD_PATH);
  if(mus.listFiles(new Mp3Filter()).length > 0){
    for(File file : mus.listFiles(new Mp3Filter())){
        songs.add(file.getName());
    }

  ArrayAdapter<String> songList=new ArrayAdapter<String>(this, R.layout.song_item, songs);
  setListAdapter(songList);
 }

有什么想法吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

尝试使用MediaStore。你也可以使用cursorAdapter。 它会不时更新您设备中的播放列表文件。

以下是一个例子:

// in your ListFragment
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); // create adapter once
        Context context = getActivity();
        int layout = android.R.layout.simple_list_item_1;
        Cursor cursor = context.getContentResolver().query(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        null,
        null,
        null,
        MediaStore.Audio.Media.TITLE + " ASC");
        int flags = 0; // no auto-requery
        mAdapter = new SimpleCursorAdapter(context, layout, cursor, MediaStore.Audio.Media.TITLE, android.R.id.text1, flags);
    }

@Override
    public void onActivityCreated(Bundle savedInstanceState)
   {
         setListAdapter(mAdapter);
    }

<强> UPD

以下是有关MediaStore的链接:http://developer.android.com/reference/android/provider/MediaStore.html

你的FragmentList:

public class ContactsFragment extends ListFragment

{
    private static final String[] FROM = { MediaStore.Audio.Media.TITLE };
    private static final int[] TO = { android.R.id.text1 };
    private CursorAdapter mAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.origin_lay, container, false);
        return view;
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        Context context = getActivity();
        int layout = android.R.layout.simple_list_item_1;
        Cursor cursor = context.getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                null,
                null,
                null,
                MediaStore.Audio.Media.TITLE + " ASC");
        int flags = 0; 
        mAdapter = new SimpleCursorAdapter(context, layout, cursor, FROM, TO, flags);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState); 

        setListAdapter(mAdapter); 
        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        mAdapter.notifyDataSetChanged();
    }
}

在活动中只显示此片段。