package com.itjob;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import android.app.Service;
import android.content.Intent;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.IBinder;
import android.provider.MediaStore;
import android.widget.Toast;
public class MusicService extends Service {
String[] mCursorCols = new String[] {
"audio._id AS _id", // index must match IDCOLIDX below
MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.MIME_TYPE, MediaStore.Audio.Media.ALBUM_ID,
MediaStore.Audio.Media.ARTIST_ID, MediaStore.Audio.Media.DURATION
};
private MediaPlayer mMediaPlayer;
private Cursor mCursor;
private int mPlayPosition = 0;
public static final String PLAY_ACTION = "com.itjob.music.PLAY_ACTION";
public static final String PAUSE_ACTION = "com.itjob.music.PAUSE_ACTION";
public static final String NEXT_ACTION = "com.itjob.music.NEXT_ACTION";
public static final String PREVIOUS_ACTION = "com.itjob.music.PREVIOUS_ACTION";
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
mMediaPlayer = new MediaPlayer();
//通过一个URI可以获取所有音频文件
Uri MUSIC_URL = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//大于10秒的可以看作是歌
mCursor = getContentResolver().query(MUSIC_URL, mCursorCols, "duration > 10000", null, null);
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
String action = intent.getAction();
if(action.equals(PLAY_ACTION)){
play();
}else if(action.equals(PAUSE_ACTION)){
pause();
}else if(action.equals(NEXT_ACTION)){
next();
}else if(action.equals(PREVIOUS_ACTION)){
previous();
}
}
//play the music
public void play() {
init();
}
//暂停时,结束服务
public void pause() {
super.stopSelf();
}
//上一首
public void previous() {
if (mPlayPosition == 0) {
mPlayPosition = mCursor.getCount() - 1;
} else {
mPlayPosition--;
}
init();
}
public void next() {
if (mPlayPosition == mCursor.getCount() - 1) {
mPlayPosition = 0;
} else {
mPlayPosition++;
}
init();
}
public void init() {
mMediaPlayer.reset();
String dataSource = getDataByPosition(mCursor, mPlayPosition);
// String info = getInfoByPosition(mCursor, mPlayPosition);
//用Toast显示歌曲信息
// Toast.makeText(getApplicationContext(), info, Toast.LENGTH_SHORT).show();
try {
mMediaPlayer.setDataSource(dataSource);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
//根据位置来获取歌曲位置
public String getDataByPosition(Cursor c,int position){
c.moveToPosition(position);
int dataColumn = c.getColumnIndex(MediaStore.Audio.Media.DATA);
String data = c.getString(dataColumn);
return data;
}
/* //获取当前播放歌曲演唱者及歌名
public String getInfoByPosition(Cursor c,int position){
c.moveToPosition(position);
int titleColumn = c.getColumnIndex(MediaStore.Audio.Media.TITLE);
int artistColumn = c.getColumnIndex(MediaStore.Audio.Media.ARTIST);
String info = c.getString(artistColumn)+" " + c.getString(titleColumn);
return info;
} */
//服务结束时要释放MediaPlayer
@Override
public void onDestroy() {
super.onDestroy();
mMediaPlayer.release();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
android 5大组件的应用案例 Activity Intent Service Broadcastreceiver ContentProvider android 5大组件的应用案例 Activity Intent Service Broadcastreceiver ContentProvider android 5大组件的应用案例 Activity Intent Service Broadcastreceiver ContentProvider
资源推荐
资源详情
资源评论
收起资源包目录
beike.zip (48个子文件)
MusicDemo
AndroidManifest.xml 741B
res
layout
main.xml 2KB
drawable-ldpi
icon.png 2KB
drawable-mdpi
icon.png 3KB
drawable-hdpi
icon.png 4KB
values
strings.xml 173B
src
com
itjob
MusicActivity.java 2KB
MusicService.java 5KB
bin
com
itjob
MusicService.class 4KB
MusicActivity.class 2KB
R.class 468B
R$layout.class 367B
R$attr.class 313B
R$id.class 472B
R$string.class 400B
R$drawable.class 373B
MusicDemo.apk 16KB
classes.dex 6KB
resources.ap_ 11KB
.classpath 280B
assets
default.properties 364B
.project 845B
gen
com
itjob
R.java 929B
ReceiverDemo
AndroidManifest.xml 794B
res
layout
main.xml 511B
drawable-ldpi
icon.png 2KB
drawable-mdpi
icon.png 3KB
drawable-hdpi
icon.png 4KB
values
strings.xml 181B
src
com
itjob
NotifyService.java 420B
ServiceActivityTest.java 2KB
AlarmReceiver.java 372B
bin
com
itjob
AlarmReceiver.class 765B
R.class 468B
R$layout.class 367B
R$attr.class 313B
ServiceActivityTest.class 3KB
NotifyService.class 741B
R$id.class 383B
R$string.class 400B
R$drawable.class 373B
classes.dex 5KB
ReceiverDemo.apk 14KB
resources.ap_ 10KB
.classpath 280B
assets
default.properties 364B
.project 848B
gen
com
itjob
R.java 774B
共 48 条
- 1
资源评论
狗蛋
- 粉丝: 13
- 资源: 41
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功