Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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 如何从单击的项目中获取文件?_Android_Listitem_Audiotrack - Fatal编程技术网

Android 如何从单击的项目中获取文件?

Android 如何从单击的项目中获取文件?,android,listitem,audiotrack,Android,Listitem,Audiotrack,嗨,我还在试着做我的wavPlayer。我的应用程序具有包含wav文件的列表项。当我点击一个文件时,它应该被播放,但它没有。我在OnListItemClick()上尝试了一些方法使其工作(我用双斜杠标记了它),但仍然有错误。大多数错误都是空指针。有人能帮我吗 这是我的代码和日志 public class PlayercobaActivity extends ListActivity implements View.OnClickListener { private MediaCurso

嗨,我还在试着做我的wavPlayer。我的应用程序具有包含wav文件的列表项。当我点击一个文件时,它应该被播放,但它没有。我在OnListItemClick()上尝试了一些方法使其工作(我用双斜杠标记了它),但仍然有错误。大多数错误都是空指针。有人能帮我吗

这是我的代码和日志

public class PlayercobaActivity extends ListActivity implements View.OnClickListener {

    private MediaCursorAdapter mediaAdapter = null;
    PlayAudio playTask;
    Button startRecordingButton, stopRecordingButton, startPlaybackButton,
            stopPlaybackButton;
    boolean isPlaying = false;
    int frequency = 11025;
    int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
    int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
    //File item ;
    String item;

   // File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Datarekaman/recording5.wav");
    //Cursor acursor;
    Cursor cursor;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_playercoba);

        startPlaybackButton = (Button) this .findViewById(R.id.StartPlaybackButton);
        stopPlaybackButton = (Button) this.findViewById(R.id.StopPlaybackButton);

        startPlaybackButton.setOnClickListener(this);
        stopPlaybackButton.setOnClickListener(this);

        startPlaybackButton.setEnabled(true);
        stopPlaybackButton.setEnabled(false);

        ContentResolver cr = getContentResolver();
        Uri uri = MediaStore.Files.getContentUri("external");
        String[] projection = null;
        String sortOrder = null; // unordered
        String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("wav");
        String[] selectionArgsPdf = new String[]{ mimeType };
        Cursor cursor = cr.query(uri, projection , selectionMimeType, selectionArgsPdf, sortOrder );

        if(null != cursor)
        {
            cursor.moveToFirst();

            mediaAdapter = new MediaCursorAdapter(this, R.layout.listitem, cursor);

            setListAdapter(mediaAdapter);


        }
    }

    //@Override
    public void onListItemClick(ListView list, View view, int position, long id) {
        super.onListItemClick(list, view, position, id);


        //String name = cursor.getString(cursor. getColumnIndex(MediaStore. MediaColumns.DISPLAY_NAME));
        //item =(String) list.getItemAtPosition(position);
        //File item = new File(name);
        //item = new File();
        //item = (String) view.getTag();
        //item = (String) getListAdapter().getItem(position);
        item = cursor.getString(cursor. getColumnIndex(MediaStore. MediaColumns.DATA));
        //playTask = new PlayAudio();
        //playTask.execute();
        Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
    }

    public void onClick(View v) {
        if (v == startPlaybackButton) {
            play();
        } else if (v == stopPlaybackButton) {
            stopPlaying();
        }
    }

    public void play() {
        startPlaybackButton.setEnabled(false);
        playTask = new PlayAudio();
        playTask.execute();
        stopPlaybackButton.setEnabled(true);
    }

    public void stopPlaying() {
        isPlaying = false;
        stopPlaybackButton.setEnabled(false);
        startPlaybackButton.setEnabled(true);
    }

    private class PlayAudio extends AsyncTask<Void, Integer, Void> {
        @Override
        protected Void doInBackground(Void... params) {
            isPlaying = true;
            int bufferSize = AudioTrack.getMinBufferSize(frequency,
                    channelConfiguration, audioEncoding);
            short[] audiodata = new short[bufferSize/4];
            try {
                DataInputStream dis = new DataInputStream(
                        new BufferedInputStream(new FileInputStream(item)));
                AudioTrack audioTrack = new AudioTrack(
                        AudioManager.STREAM_MUSIC, frequency,
                        channelConfiguration, audioEncoding, bufferSize,
                        AudioTrack.MODE_STREAM);
                audioTrack.play();
                while (isPlaying && dis.available() > 0) {
                    int i = 0;
                    while (dis.available() > 0 && i < audiodata.length) {
                        audiodata[i] = dis.readShort();
                        i++;
                    }
                    audioTrack.write(audiodata, 0, audiodata.length);
                }
                dis.close();
                startPlaybackButton.setEnabled(false);
                stopPlaybackButton.setEnabled(true);
            } catch (Throwable t) {
                Log.e("AudioTrack", "Playback Failed");
            }
            return null;
        }

        protected void onPostExecute(Void result) {
            startPlaybackButton.setEnabled(true);
            stopPlaybackButton.setEnabled(false);
        }

    }

    private class MediaCursorAdapter extends SimpleCursorAdapter {

        public MediaCursorAdapter(Context context, int layout, Cursor c) {
            super(context, layout, c,
                    new String[] { MediaStore.MediaColumns.DISPLAY_NAME},
                    new int[] { R.id.displayname});
        }
    }
}

如果您正在扩展
CursorAdapter
,则可以通过
onListItemClick的第一个参数获取光标的位置

Cursor cursor = (Cursor) list.getItemAtPosition(position);
item = cursor.getString(cursor. getColumnIndex(MediaStore. MediaColumns.DATA));
Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();

谢谢你的帮助,兄弟,我的应用现在可以播放文件了:)
Cursor cursor = (Cursor) list.getItemAtPosition(position);
item = cursor.getString(cursor. getColumnIndex(MediaStore. MediaColumns.DATA));
Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();