如何解决当我使用 android 10 时,媒体播放器不给我音乐图片
当我使用 android 10 时,媒体播放器没有给我音乐的图片,它在 android 9 及更低版本中工作
我尝试了很多,但没有任何效果这是我的 MainActivity
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
static ArrayList<MusicFile> musicList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
permission();
}
private void permission() {
if ((ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.WRITE_EXTERNAL_STORAGE))
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_CODE);
}else {
musicList = getAllAudio(this);
initViewPager();
}
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
if (requestCode == REQUEST_CODE && grantResults[0] == PackageManager.PERMISSION_GRANTED){
musicList = getAllAudio(this);
initViewPager();
}else {
ActivityCompat.requestPermissions(MainActivity.this,REQUEST_CODE);
}
}
private void initViewPager() {
ViewPager viewPager = findViewById(R.id.viewPager);
TabLayout tabLayout = findViewById(R.id.tab_layout);
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFragment(new SongFragment(),"Audio");
viewPagerAdapter.addFragment(new VideoFragment(),"Video");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
public static class ViewPagerAdapter extends FragmentPagerAdapter{
ArrayList<Fragment> fragments;
ArrayList<String> titles;
public ViewPagerAdapter(@NonNull FragmentManager fm) {
super(fm);
this.fragments = new ArrayList<>();
this.titles = new ArrayList<>();
}
public void addFragment(Fragment fragment,String title){
fragments.add(fragment);
titles.add(title);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}
public static ArrayList<MusicFile> getAllAudio(Context context){
ArrayList<MusicFile> tempAudioList = new ArrayList<>();
Uri uri ;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
uri = MediaStore.Audio.Media
.getContentUri(MediaStore.VOLUME_EXTERNAL );
} else {
uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
String projection[] = {
MediaStore.Audio.Media.ALBUM,MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media._ID
};
Cursor cursor = context.getContentResolver().query(uri,projection,null,null);
if (cursor != null){
cursor.movetoFirst();
do {
String album = cursor.getString(0);
String title = cursor.getString(1);
String duration = cursor.getString(2);
String id = cursor.getString(5);
String path = cursor.getString(3);
String artist = cursor.getString(4);
MusicFile musicFile = new MusicFile(path,title,artist,album,duration);
tempAudioList.add(musicFile);
}while (cursor.movetoNext());
}
return tempAudioList;
}
}
这是我的适配器。
import android.content.Context;
import android.content.Intent;
import android.media.MediaMetadataRetriever;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
public class MusicAdapter extends RecyclerView.Adapter<MusicAdapter.MyViewHolder> {
Context mContext;
ArrayList<MusicFile> mFiles;
public MusicAdapter(Context mContext,ArrayList<MusicFile> mFiles){
this.mContext = mContext;
this.mFiles = mFiles;
}
@NonNull
@Override
public MusicAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.music_item,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MusicAdapter.MyViewHolder holder,int position) {
holder.file_name.setText(mFiles.get(position).getTitle());
byte [] image = getalbumart(mFiles.get(position).getPath());
if (image != null){
Glide.with(mContext).asBitmap().load(image).into(holder.album_art);
}else {
Glide.with(mContext).load(R.drawable.ic_music_pic).into(holder.album_art);
}
holder.itemView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext,PlayerActivity.class);
intent.putExtra("position",position);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mFiles.size();
}
private byte[] getalbumart(String path) {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(path);
byte[] art = retriever.getEmbeddedPicture();
retriever.release();
return art;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView file_name;
ImageView album_art;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
file_name = itemView.findViewById(R.id.music_file_name);
album_art = itemView.findViewById(R.id.music_img);
}
}
}
异常发生在方法getalbumart(String path)
中
在retriever.setDataSource(path);
例外是IllegalArgumentException
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。