Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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
Java 如何使用onclick从ListView项获取URI?_Java_Android_Uri - Fatal编程技术网

Java 如何使用onclick从ListView项获取URI?

Java 如何使用onclick从ListView项获取URI?,java,android,uri,Java,Android,Uri,大家好,我是java和android开发的新手,我需要帮助从用户单击的项目中获取URI,以便可以播放 这是所有的代码,我到目前为止,请帮助我已经被困在这个特定的问题一段时间了 问题出在McLicklistner中 package com.example.musicplayer; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app

大家好,我是java和android开发的新手,我需要帮助从用户单击的项目中获取URI,以便可以播放

这是所有的代码,我到目前为止,请帮助我已经被困在这个特定的问题一段时间了

问题出在McLicklistner中

package com.example.musicplayer;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
            if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)==PackageManager.PERMISSION_GRANTED){
                Log.i("Permission ","gRANTED");
            }
        }
    }
    ListView musicListView;
    ArrayList<String> musicArrayList;
    ArrayAdapter<String> adapter;
    MediaPlayer mediaPlayer;
    Uri songUri;

    public void play(View view){

    }
    public void pause(View view){

    }
    public void stop(View view){

    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            this.getSupportActionBar().hide();
        }catch (Exception e){
            setContentView(R.layout.activity_main);
        }
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
        }
        musicListView= (ListView) findViewById(R.id.musicListView);
        musicArrayList= new ArrayList<>();
        adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,android.R.id.text1, musicArrayList);
        String[] proj = { MediaStore.Audio.Media.DISPLAY_NAME };// Can include more data for more details and check it.

        Cursor audioCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);

        if(audioCursor != null){
            if(audioCursor.moveToFirst()){
                do{
                    int audioIndex = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
                    musicArrayList.add(audioCursor.getString(audioIndex));
                }while(audioCursor.moveToNext());
            }
        }
        audioCursor.close();

        musicListView.setAdapter(adapter);

        musicListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                
                songUri =//////PLEASE HELP ME GET THIS//////; 
                MediaPlayer mediaPlayer = new MediaPlayer();
                mediaPlayer.setAudioAttributes(
                        new AudioAttributes.Builder()
                                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                                .setUsage(AudioAttributes.USAGE_MEDIA)
                                .build()
                );
                try {
                    mediaPlayer.setDataSource(getApplicationContext(), songUri);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mediaPlayer.start();

            }
        });

    }
    }

package com.example.musicplayer;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.appcompat活动;
导入androidx.core.app.ActivityCompat;
导入androidx.core.content.ContextCompat;
导入android.Manifest;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.database.Cursor;
导入android.media.AudioAttributes;
导入android.media.AudioManager;
导入android.media.MediaPlayer;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.MediaStore;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入java.io.File;
导入java.io.IOException;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
如果(grantResults.length>0&&grantResults[0]==已授予PackageManager.PERMISSION){
if(ContextCompat.checkSelfPermission(this、Manifest.permission.READ\u EXTERNAL\u STORAGE)==PackageManager.permission\u provided){
日志i(“许可”、“授予”);
}
}
}
ListView音乐视图;
ArrayList Music CarrayList;
阵列适配器;
媒体播放器;
乌里松古里;
公共无效播放(视图){
}
公共无效暂停(视图){
}
公共无效停止(视图){
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
试一试{
this.getSupportActionBar().hide();
}捕获(例外e){
setContentView(R.layout.activity_main);
}
if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ\u EXTERNAL\u STORAGE)!=PackageManager.permission\u provided){
ActivityCompat.requestPermissions(这个新字符串[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
musicListView=(ListView)findViewById(R.id.musicListView);
musicArrayList=newarraylist();
adapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,android.R.id.text1,musicArrayList);
String[]proj={MediaStore.Audio.Media.DISPLAY_NAME};//可以包含更多数据以获取更多详细信息并进行检查。
Cursor audioCursor=getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,proj,null,null,null);
如果(音频光标!=null){
if(audioCursor.moveToFirst()){
做{
int audioIndex=audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
添加(audioCursor.getString(audioIndex));
}while(audioCursor.moveToNext());
}
}
audioCursor.close();
musicListView.setAdapter(适配器);
musicListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
songUri=//请帮我拿这个;
MediaPlayer=新的MediaPlayer();
mediaPlayer.setAudioAttributes(
新建AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT\u TYPE\u MUSIC)
.setUsage(AudioAttributes.USAGE\u媒体)
.build()
);
试一试{
setDataSource(getApplicationContext(),songUri);
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
mediaPlayer.prepare();
}捕获(IOE异常){
e、 printStackTrace();
}
mediaPlayer.start();
}
});
}
}

我还没有尝试过这个解决方案,但一般来说,这个答案中指出的方法可以解决您的问题。

您可以添加模型类和适配器类吗?所以这可能有助于得到答案。嗨,Ramesh,我刚刚更新了所有的代码谢谢,但我仍然有麻烦。。。让我问一下,我如何注销所选项目的URI?