package lzf.video.edit;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import lzf.video.edit.adapter.AudioInfoAdapter;
import lzf.video.edit.entry.AudioEntry;
import lzf.video.edit.utils.MediaUtils;
public class SelectLocalAudioListActivity extends AppCompatActivity {
private static final String[] SUPPORT_DECODE_AUDIO_FORMAT = {"audio/mpeg", "audio/x-ms-wma", "audio/mp4a-latm", "audio/x-wav"};
private RecyclerView recycler;
private AudioInfoAdapter adapter;
private List<AudioEntry> list;
private static final int PAGE_SIZE = 20;
private int mPage = 1;
private boolean mHasMore = true;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mp3_local_list);
recycler = (RecyclerView) findViewById(R.id.recycler);
recycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
list = new ArrayList<>();
adapter = new AudioInfoAdapter(this, list);
recycler.setAdapter(adapter);
recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if(newState == RecyclerView.SCROLL_STATE_SETTLING){
//加载下页
if(mHasMore){
mPage++;
new GetAudiosTask(SelectLocalAudioListActivity.this).execute();
}else {
Toast.makeText(SelectLocalAudioListActivity.this,"没有更多",Toast.LENGTH_SHORT).show();
}
}
}
});
new GetAudiosTask(this).execute();
}
class GetAudiosTask extends AsyncTask<Void, Void, List<AudioEntry>> {
Context context;
GetAudiosTask(Context context) {
this.context = context;
}
@Override
protected List<AudioEntry> doInBackground(Void... params) {
return getLocalAudio(context, mPage, PAGE_SIZE);
}
@Override
protected void onPostExecute(List<AudioEntry> result) {
super.onPostExecute(result);
Log.e("lzf_audio",result.toString());
if (result == null || result.isEmpty()) {
mHasMore = false;
} else {
list.addAll(result);
adapter.notifyDataSetChanged();
}
}
/**
* 获取sd卡所有的音频文件
*
* @param context
* @param page 从1开始
* @param context
* @return
* @throws Exception
*/
private ArrayList<AudioEntry> getLocalAudio(Context context, int page, int pageSize) {
ArrayList<AudioEntry> audios = null;
StringBuilder selectionBuilder = new StringBuilder();
int size = SUPPORT_DECODE_AUDIO_FORMAT.length;
for (int i = 0; i != size; ++i) {
selectionBuilder.append("mime_type=? or ");
}
int sbLen = selectionBuilder.length();
selectionBuilder.delete(sbLen - 3, sbLen);
final String selection = selectionBuilder.toString();
final String orderBy = String.format("%s LIMIT %s , %s ", MediaStore.Audio.Media.DEFAULT_SORT_ORDER, (page - 1) * pageSize, pageSize);
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.YEAR,
MediaStore.Audio.Media.MIME_TYPE,
MediaStore.Audio.Media.SIZE,
MediaStore.Audio.Media.DATA},
selection,
SUPPORT_DECODE_AUDIO_FORMAT, orderBy);
audios = new ArrayList<>();
if (cursor != null && cursor.moveToFirst()) {
AudioEntry audioEntry = null;
String fileUrl = null;
boolean isMatchAudioFormat = false;
do {
fileUrl = cursor.getString(9);
isMatchAudioFormat = MediaUtils.isMatchAudioFormat(fileUrl, 44100, 2);
if (!isMatchAudioFormat) {
continue;
}
audioEntry = new AudioEntry();
audioEntry.id = cursor.getLong(0);
// 文件名
audioEntry.fileName = cursor.getString(1);
// 歌曲名
audioEntry.title = cursor.getString(2);
// 时长
audioEntry.duration = cursor.getInt(3);
// 歌手名
audioEntry.artist = cursor.getString(4);
// 专辑名
audioEntry.album = cursor.getString(5);
// 年代
audioEntry.year = cursor.getString(6);
// 歌曲格式
audioEntry.mime = cursor.getString(7).trim();
// 文件大小
audioEntry.size = cursor.getString(8);
// 文件路径
audioEntry.fileUrl = fileUrl;
audios.add(audioEntry);
} while (cursor.moveToNext());
cursor.close();
}
return audios;
}
}
}