안 드 로 이 드 응용 개발-MP3 음악 재생 기 코드 구현(1)
1.데이터베이스 에서 모든 음악 데 이 터 를 조회 하여 List 집합 에 저장 합 니 다.List 에 저 장 된 것 은 Mp3Info 대상 입 니 다.
2.반복 List 집합,각각 Mp3Info 대상 의 모든 속성 을 Map 대상 에 저장
3.List 집합 을 정의 하고 맵 대상 을 List 집합 에 추가 합 니 다.
4.SimpleAdpter 를 정의 하여 setAdpter 방법 을 호출 하여 목록 에 데 이 터 를 표시 합 니 다.
/**
* , List
*
* @return
*/
public List<Mp3Info> getMp3Infos() {
Cursor cursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>();
for (int i = 0; i < cursor.getCount(); i++) {
Mp3Info mp3Info = new Mp3Info();
cursor.moveToNext();
long id = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media._ID)); // id
String title = cursor.getString((cursor
.getColumnIndex(MediaStore.Audio.Media.TITLE)));//
String artist = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.ARTIST));//
long duration = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media.DURATION));//
long size = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media.SIZE)); //
String url = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DATA)); //
int isMusic = cursor.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//
if (isMusic != 0) { //
mp3Info.setId(id);
mp3Info.setTitle(title);
mp3Info.setArtist(artist);
mp3Info.setDuration(duration);
mp3Info.setSize(size);
mp3Info.setUrl(url);
mp3Infos.add(mp3Info);
}
}
return mp3Infos;
}
/**
*
* @param mp3Infos
*/
public void setListAdpter(List<Mp3Info> mp3Infos) {
List<HashMap<String, String>> mp3list = new ArrayList<HashMap<String, String>>();
for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
HashMap<String, String> map = new HashMap<String, String>();
map.put("title", mp3Info.getTitle());
map.put("Artist", mp3Info.getArtist());
map.put("duration", String.valueOf(mp3Info.getDuration()));
map.put("size", String.valueOf(mp3Info.getSize()));
map.put("url", mp3Info.getUrl());
mp3list.add(map);
}
mAdapter = new SimpleAdapter(this, mp3list,
R.layout.music_list_item_layout, new String[] { "title", "Artist", "duration" },
new int[] { R.id.music_title, R.id.music_Artist, R.id.music_duration });
mMusiclist.setAdapter(mAdapter);
}
구현 효 과 는 그림:필요 2:목록 의 모든 항목 을 클릭 하고 서 비 스 를 시작 하여 음악 을 재생 합 니 다.
1. 등록 항목 클릭 모니터 OnItemClickListener
2. OnItemClickListener 인 터 페 이 스 를 실현 하 는 내부 클래스 정의
3. 계승 서비스의 서비스 클래스 를 정의 합 니 다.PlayerServie
1. 등록 항목 클릭 모니터 OnItemClickListener
mMusiclist = (ListView) findViewById(R.id.music_list);
mMusiclist.setOnItemClickListener(new MusicListItemClickListener());
mp3Infos = getMp3Infos();
setListAdpter(getMp3Infos());
2. OnItemClickListener 인 터 페 이 스 를 실현 하 는 내부 클래스 정의
private class MusicListItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if(mp3Infos != null) {
Mp3Info mp3Info = mp3Infos.get(position);
Log.d("mp3Info-->", mp3Info.toString());
Intent intent = new Intent();
intent.putExtra("url", mp3Info.getUrl());
intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG);
intent.setClass(MainActivity.this, PlayerService.class);
startService(intent); //
}
}
}
3. 서 비 스 를 계승 하 는 서비스 클래스 PlayerServie(미 비 한 서비스 클래스)를 정의 합 니 다.
package com.wwj.sb.service;
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.IBinder;
import com.wwj.sb.domain.AppConstant;
@SuppressLint("NewApi")
public class PlayerService extends Service {
private MediaPlayer mediaPlayer = new MediaPlayer(); //
private String path; //
private boolean isPause; //
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(mediaPlayer.isPlaying()) {
stop();
}
path = intent.getStringExtra("url");
int msg = intent.getIntExtra("MSG", 0);
if(msg == AppConstant.PlayerMsg.PLAY_MSG) {
play(0);
} else if(msg == AppConstant.PlayerMsg.PAUSE_MSG) {
pause();
} else if(msg == AppConstant.PlayerMsg.STOP_MSG) {
stop();
}
return super.onStartCommand(intent, flags, startId);
}
/**
*
* @param position
*/
private void play(int position) {
try {
mediaPlayer.reset();//
mediaPlayer.setDataSource(path);
mediaPlayer.prepare(); //
mediaPlayer.setOnPreparedListener(new PreparedListener(position));//
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*/
private void pause() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
isPause = true;
}
}
/**
*
*/
private void stop(){
if(mediaPlayer != null) {
mediaPlayer.stop();
try {
mediaPlayer.prepare(); // stop start , prepare
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onDestroy() {
if(mediaPlayer != null){
mediaPlayer.stop();
mediaPlayer.release();
}
}
/**
*
* OnPrepareLister ,
*
*/
private final class PreparedListener implements OnPreparedListener {
private int positon;
public PreparedListener(int positon) {
this.positon = positon;
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start(); //
if(positon > 0) { //
mediaPlayer.seekTo(positon);
}
}
}
}
상기 코드 는 두 가지 요 구 를 실현 하여 음악 목록 을 표시 하고 목록 을 실현 하 며 이 벤트 를 클릭 하여 Servic 를 시작 합 니 다.다음 에는 음악 재생 을 통제 하 는 수 요 를 실현 할 것 이다.여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.