1

我正在开发一个应用程序,其中特定文件将列在列表视图中。现在,当用户单击列表中的项目时,所选文件应在其默认处理程序中打开。例如:如果用户点击列表中的一首歌曲,该歌曲必须在用户设备上配置的默认播放器中开始播放,以此类推,用于图像、文档等。

我编写了以下代码来加载列表中的所有音频文件(暂时)。现在我被困在 onClickListener 上。我不知道如何继续,所以当我单击列表中的文件时,它会开始在我的默认音乐播放器中播放。

package com.example.listviewexample;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ListViewActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_view);

    String selection=MediaStore.Audio.Media.IS_MUSIC+ " != 0";
    String projection[]={MediaStore.Audio.Media.TITLE};
    Cursor cursor=this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection, null, null);

    final ListView listView=(ListView) findViewById(R.id.listview);
    final ArrayList<String> arrayList=new ArrayList<String>();

    while(cursor.moveToNext()){
        arrayList.add(cursor.getString(0));
    }

    final StableArrayAdapter adapter=new StableArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

        @SuppressLint("NewApi")
        @Override
        public void onItemClick(AdapterView<?> parent, final View view, int position,
                long id) {
            final String item=(String) parent.getItemAtPosition(position);
            Toast.makeText(getApplicationContext(), "Currently Selected Song:"+item, Toast.LENGTH_SHORT).show();
        }

    });
}

private class StableArrayAdapter extends ArrayAdapter<String>{

    HashMap<String, Integer> mIdMap=new HashMap<String, Integer>();

    public StableArrayAdapter(Context context, int textViewResourceId,List<String> objects) {
        super(context, textViewResourceId,objects);

        for(int i=0;i<objects.size();i++)
        {
            mIdMap.put(objects.get(i), i);
        }
    }

    @Override
    public long getItemId(int position) {
        String item=getItem(position);
        return mIdMap.get(item);
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

}

}

编辑:根据我尝试以下代码的建议:

Intent intent=Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_MUSIC);
startActivity(intent);

现在音乐播放器正在启动。但是我如何告诉音乐播放器只播放特定文件?

4

2 回答 2

1

这是您打开默认 android 浏览器的方式(取自此处

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);

遵循相同的逻辑,我发现了这个 Intent CATEGORY_APP_MUSIC。您需要将它与ACTION_MAIN一起使用。试试吧,我希望它对你有用。

于 2013-05-12T08:15:13.247 回答
0

尝试这个:

    Intent notificationIntent = new Intent(Intent.ACTION_VIEW, fileUri);                        
    startActivity(notificationIntent);
于 2013-05-12T08:16:09.880 回答