Java 如何使用onclick从ListView项获取URI?
大家好,我是java和android开发的新手,我需要帮助从用户单击的项目中获取URI,以便可以播放 这是所有的代码,我到目前为止,请帮助我已经被困在这个特定的问题一段时间了 问题出在McLicklistner中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
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?