如何在listView中,能将手机中的音乐导入到其中
第一步:在自己的模块中的jAVA文件夹下,找到三个包,在第一个包中要创建三个包,首先创建出一个实体类的包,名称可以为entity;其次创建一个适配器的包,名称为Adapter;再然后创建碎片包,名称为Fragment.
第二步:在实体类中创建一个java.class文件,文件名为Music(注意首字母一定要大写);在这个文件中创建对象(如果使用private修饰,一定要用get与set方法)
第三步:在Layout文件夹下创建行布局XML文件(music_item),根据实体类中所写的对象进行布局`
android:id="@+id/item_play"
android:layout_width="4dp"
android:layout_height="80dp"
android:background="@color/colorAccent"
android:contentDescription="@null"
android:visibility="invisible" />
"
第四步:在Adapter包中创建MusicAdapter类,要继承BaseAdapter,定义List<实体类名> musiclist,Context–创建构造方法,参数为(List<实体类名> musiclist,Context),然后修改getCount方法和getView方法,在getView方法中要利用缓存原理(ViewHolder类)
public int getCount() {
return musicList.size();
}
public View getView(int i, View view, ViewGroup viewGroup) {
//缓存原理
View v = null
ViewHolder viewHolder
if (view == null) {
LayoutInflater inflater = LayoutInflater.from(context)
v = inflater.inflate(R.layout.item_music, null)
viewHolder = new ViewHolder()
viewHolder.ablumbmp = v.findViewById(R.id.item_img1)
viewHolder.artisttv = v.findViewById(R.id.item_text1)
viewHolder.titletv = v.findViewById(R.id.item_text2)
viewHolder.ablumtv = v.findViewById(R.id.item_text3)
v.setTag(viewHolder)
} else {
v = view
viewHolder = (ViewHolder) v.getTag()
}
//控件赋值
viewHolder.ablumbmp.setImageBitmap(musicList.get(i).getAblumbmp())
viewHolder.artisttv.setText(musicList.get(i).getArtist())
viewHolder.titletv.setText(musicList.get(i).getTitle())
viewHolder.ablumtv.setText(musicList.get(i).getAblum())
return v
}
class ViewHolder {
ImageView ablumbmp
TextView artisttv
TextView titletv
TextView ablumtv
}
第五步:在Fragment中创建两个Fragment–localFragment和onlinFragmnet
第六步:在Main布局文件中创建ViewPager
第七步:MainActivity中对ViewPager进行定义,绑定ID,还要建立一个数组,用来存放所要滑动的页面;在内部创建一个适配器的类(MyAdapter)要继承 FragmentPagerAdapter,并对这里面的构造方法内容进行修改,再将ViewPager绑定适配器(有注意点,请看图片)
第八步:将ListView格局写在localFragment.xml文件中,在localFragment.java对其定义,绑定ID,然后添加所要获取的内容,因为是从手机上获取所以需要下面所示代码
//获取 ContentResolver对象
ContentResolver resolver=getActivity().getContentResolver()
//创建游标
Cursor cursor=resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null)
//游标归零
cursor.moveToFirst()
do {
String title=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE))
String artist=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST))
String ablum=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM))
Music m=new Music()
m.title=title
m.artist=artist
m.ablum=ablum
musicList.add(m)
}while (cursor.moveToNext())
cursor.close()
注意点:获取文件时,需要权限,安卓版本6.0以下的手机,在manifests中加入
安卓版本6.0以上的则复杂一点,但使用第三方插件容易一点
印度人写的第三方插件(点击查看)
https://github.com/pankaj89/PermissionHelper
build.gradle中编译
compile ‘com.master.android:permissionhelper:1.3’
private String TAG = "HelloActivity";
private PermissionHelper permissionHelper;
permissionHelper = new PermissionHelper(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
permissionHelper.request(new PermissionHelper.PermissionCallback() {
@Override
public void onPermissionGranted() {
Log.e(TAG,"onPermissionGranted...");
}
@Override
public void onIndividualPermissionGranted(String[] grantedPermission) {
Log.e(TAG,"onIndividualPermissionGranted() called with: grantedPermission = [" + TextUtils.join(",",grantedPermission) + "]");
}
@Override
public void onPermissionDenied() {
Log.e(TAG,"onPermissionDenied...");
}
@Override
public void onPermissionDeniedBySystem() {
Log.e(TAG,"onPermissionDeniedBySystem...");
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (permissionHelper != null) {
permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
第九步:获取音乐的专辑图片 1.获取音频文件的ID 2.根据专辑ID继续获取专辑图片
在do中添加
//获取专辑ID
int albumId = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID))
//根据专辑ID获取到专辑封面图
m.thumbBitmap = getAlbumArt(albumId)
在localFragment中输入以下代码,可以获取专辑图片,但为了减轻list的负担,可以在MusicAdapter中写
/**
* 根据专辑ID获取专辑封面图
* @param album_id 专辑ID
* @return
*/
private Bitmap getAlbumArt(int album_id) {
String mUriAlbums = "content://media/external/audio/albums";
String[] projection = new String[]{"album_art"};
Cursor cur = context.getContentResolver().query(Uri.parse(mUriAlbums + "/" + Integer.toString(album_id)), projection, null, null, null);
String album_art = null;
if (cur.getCount() > 0 && cur.getColumnCount() > 0) {
cur.moveToNext();
album_art = cur.getString(0);
}
cur.close();
Bitmap bm = null;
if (album_art != null) {
bm = BitmapFactory.decodeFile(album_art);
} else {
bm = BitmapFactory.decodeResource(getResources(), R.drawable.default_cover);
}
return bm;
}