如何直接从android中的ListView打开列出的文件

时间:2013-05-12 07:58:08

标签: android listview mediastore

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

我编写了以下代码来加载列表中的所有音频文件(暂时)。现在我被困在了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);

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

2 个答案:

答案 0 :(得分:1)

这是打开默认Android浏览器(取自here

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

同样的逻辑我发现了这个意图CATEGORY_APP_MUSIC。您需要将其与ACTION_MAIN一起使用。试试吧我希望它对你有用。

答案 1 :(得分:0)

试试这个:

    Intent notificationIntent = new Intent(Intent.ACTION_VIEW, fileUri);                        
    startActivity(notificationIntent);