Android 如何在媒体播放器中添加通知代码?
当我在后台播放歌曲时,我希望媒体播放器上有通知 例如播放音乐、音乐播放器 公共类MainActivity扩展了PreparedListener上的活动实现, MediaController.MediaPlayerControl{Android 如何在媒体播放器中添加通知代码?,android,android-mediaplayer,Android,Android Mediaplayer,当我在后台播放歌曲时,我希望媒体播放器上有通知 例如播放音乐、音乐播放器 公共类MainActivity扩展了PreparedListener上的活动实现, MediaController.MediaPlayerControl{ private static final String TAG = "AudioPlayer"; ListView mListView; private MediaPlayer mediaPlayer; private MediaController mediaCont
private static final String TAG = "AudioPlayer";
ListView mListView;
private MediaPlayer mediaPlayer;
private MediaController mediaController;
ArrayList<Song> songList;
private Handler handler = new Handler();
public static int position = 0;
Intent songIntent = new Intent (android.content.Intent.ACTION_SEND);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
mediaController = new MediaController(this);
mediaController.setPrevNextListeners(new View.OnClickListener() {
@Override
public void onClick(View v) {
// for next item
if (position != songList.size() - 1) {
position++;
} else {
position = 0;
}
playSong(songList.get(position).getPath());
}
}, new View.OnClickListener() {
public void onClick(View v) {
// for previous item
if (position != 0) {
position--;
} else {
position = songList.size() - 1;
}
playSong(songList.get(position).getPath());
}
});
songList = new ArrayList<Song>();
scanDirectory(new File(Environment.getExternalStorageDirectory()
.getPath()));
mListView = (ListView) findViewById(R.id.listView1);
mListView.setAdapter(new ArrayAdapter<Song>(this,
android.R.layout.simple_list_item_1, songList));
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
MainActivity.position = position;
Song song = (Song) parent.getItemAtPosition(position);
playSong(song.getPath());
}
});
}
public void playSong(String path) {
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mediaPlayer.start();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mediaController.show();
return false;
}
public void start() {
mediaPlayer.start();
}
public void pause() {
mediaPlayer.pause();
}
public int getDuration() {
return mediaPlayer.getDuration();
}
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int i) {
mediaPlayer.seekTo(i);
}
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
public int getBufferPercentage() {
return 0;
}
public boolean canPause() {
return true;
}
public boolean canSeekBackward() {
return true;
}
public boolean canSeekForward() {
return true;
}
public void onPrepared(MediaPlayer mediaPlayer) {
Log.d(TAG, "onPrepared");
mediaController.setMediaPlayer(this);
mediaController.setAnchorView(findViewById(R.id.main_audio_view));
handler.post(new Runnable() {
public void run() {
mediaController.setEnabled(true);
mediaController.show();
}
});
}
@Override
protected void onStop() {
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
}
public void scanDirectory(File path) {
File[] listFiles = path.listFiles();
if (listFiles != null && listFiles.length > 0) {
for (File file : listFiles) {
if (file.isDirectory()) {
scanDirectory(file);
} else {
addSongToList(file);
}
}
}
}
public void addSongToList(File file) {
if (file.getName().endsWith(".mp3"))
songList.add(new Song(file.getName(), file.getPath()));
}
@Override
public int getAudioSessionId() {
// TODO Auto-generated method stub
return 0;
}
private static final String TAG=“AudioPlayer”;
列表视图;
私人媒体播放器;
专用媒体控制器;
ArrayList歌曲列表;
私有处理程序=新处理程序();
公共静态int位置=0;
Intent songIntent=新的Intent(android.content.Intent.ACTION\u SEND);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer=新的mediaPlayer();
mediaPlayer.setOnPreparedListener(这个);
mediaController=新的mediaController(此);
mediaController.setPrevNextListeners(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//下一项
if(position!=songList.size()-1){
位置++;
}否则{
位置=0;
}
playSong(songList.get(position.getPath());
}
},新视图。OnClickListener(){
公共void onClick(视图v){
//上一项
如果(位置!=0){
位置--;
}否则{
position=songList.size()-1;
}
playSong(songList.get(position.getPath());
}
});
songList=newarraylist();
扫描目录(新文件(Environment.getExternalStorageDirectory())
.getPath());
mListView=(ListView)findViewById(R.id.listView1);
mListView.setAdapter(新阵列适配器(此,
android.R.layout.simple_list_item_1,songList));
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
MainActivity.position=位置;
宋宋=(宋)父项。getItemAtPosition(位置);
playSong(song.getPath());
}
});
}
公共无效播放歌曲(字符串路径){
mediaPlayer.reset();
试一试{
mediaPlayer.setDataSource(路径);
mediaPlayer.prepare();
}捕获(IllegalArgumentException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(安全异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(非法状态){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
mediaPlayer.start();
}
@凌驾
公共布尔onTouchEvent(运动事件){
mediaController.show();
返回false;
}
公开作废开始(){
mediaPlayer.start();
}
公共空间暂停(){
mediaPlayer.pause();
}
public int getDuration(){
返回mediaPlayer.getDuration();
}
public int getCurrentPosition(){
返回mediaPlayer.getCurrentPosition();
}
公共空间seekTo(内部一){
mediaPlayer.seekTo(一);
}
公共布尔值显示(){
返回mediaPlayer.isPlaying();
}
public int getBufferPercentage(){
返回0;
}
公共布尔canPause(){
返回true;
}
公共布尔值canSeekBackward(){
返回true;
}
公共布尔值canSeekForward(){
返回true;
}
已准备好公开作废(MediaPlayer MediaPlayer){
日志d(标签“准备就绪”);
mediaController.setMediaPlayer(此);
mediaController.setAnchorView(findViewById(R.id.main_audio_view));
handler.post(新的Runnable(){
公开募捐{
mediaController.setEnabled(true);
mediaController.show();
}
});
}
@凌驾
受保护的void onStop(){
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
}
public void扫描目录(文件路径){
File[]listFiles=path.listFiles();
if(listFiles!=null&&listFiles.length>0){
用于(文件:listFiles){
if(file.isDirectory()){
董事会(档案);
}否则{
addSongToList(文件);
}
}
}
}
公共无效addSongToList(文件){
if(file.getName().endsWith(“.mp3”))
添加(新歌(file.getName(),file.getPath());
}
@凌驾
public int getAudioSessionId(){
//TODO自动生成的方法存根
返回0;
}
}
请给我一些建议
提前感谢您创建了如下通知:
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence title= "Playing";
CharSequence message = "My song";
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(), 0);
Notification notif = new Notification(R.drawable.disco, "Playing", System.currentTimeMillis());
notif.setLatestEventInfo(context, title, message, contentIntent);
nm.notify(1, notif);
要激活/取消激活通知,请阅读有关android活动生命周期的内容。另请阅读教程以获取通知。请澄清问题。播放列表中的歌曲时,只需将歌曲的名称或id传递给通知,就可以了……;)当歌曲在后台播放时,它应该显示正在播放的歌曲和正在播放的歌曲,或者暂停播放您尝试过的代码