2014-11-05 96 views
0

我试图创建一个媒体播放器,将我所有的歌曲放在主屏幕上的播放列表中。实际上有两件事我无法弄清楚。第一个是,如何让应用程序从Android设备的文件夹中自动更新播放列表。 2nd显然,我的应用程序不会在我为播放列表创建的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); 
} 

任何想法? 谢谢。

回答

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(); 
    } 
} 

在活动只是显示这个fragme NT。

+0

我在“SimpleCursorAdapter”(构造函数未定义),“getActivity”(方法未定义)和“setListAdapter(mAdapter)”(无法解析为变量)上收到3个错误。我只是一名Android编程的初学者,我目前正在通过示例进行学习,所以你可以更加明确吗? – bgilca 2014-11-05 10:52:02

+0

@bgilca看看我更新的答案。 – QArea 2014-11-05 12:12:31