android中播放音乐 朱雀 2022-07-13 00:24 206阅读 0赞 1、最好是把代码写到服务中,退出app应用,播放的音乐也不会停止,为了测试方便,在activity中就直接写代码了,先把一个音乐文件放到sd卡中,需要用到的权限(api文档介绍说:1是网络请求、2是不让屏幕变暗) * **Internet Permission** - If you are using MediaPlayer to stream network-based content, your application must request network access. <uses-permission android:name="android.permission.INTERNET" /> * **Wake Lock Permission** - If your player application needs to keep the screen from dimming or the processor from sleeping, or uses the `MediaPlayer.setScreenOnWhilePlaying()` or `MediaPlayer.setWakeMode()`methods, you must request this permission. <uses-permission android:name="android.permission.WAKE_LOCK" /> 2、布局文件代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_player_music" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:orientation="vertical" tools:context="zhuyu.testrp.example.com.PlayerMusicActivity"> <TextView android:text="输入本地或网络音乐地址:" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:hint="请输入播放地址" android:maxLines="1" android:text="/storage/emulated/0/msmm.mp3" android:id="@+id/et_player_music" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:paddingTop="20dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/player_music_play" android:text="播放" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> <Button android:id="@+id/player_music_pause" android:text="暂停" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> <Button android:id="@+id/player_music_replay" android:text="重播" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> <Button android:id="@+id/player_music_stop" android:text="停止" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> </LinearLayout> <TextView android:id="@+id/tv_player_music" android:paddingTop="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 3、对应activity中的代码: public class PlayerMusicActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv_player_music; private EditText et_player_music; private Button player_music_play,player_music_pause,player_music_replay,player_music_stop; private MediaPlayer mediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player_music); et_player_music = (EditText) findViewById(R.id.et_player_music); tv_player_music = (TextView) findViewById(R.id.tv_player_music); player_music_play = (Button) findViewById(R.id.player_music_play); player_music_pause = (Button) findViewById(R.id.player_music_pause); player_music_replay = (Button) findViewById(R.id.player_music_replay); player_music_stop = (Button) findViewById(R.id.player_music_stop); player_music_play.setOnClickListener(this); player_music_pause.setOnClickListener(this); player_music_replay.setOnClickListener(this); player_music_stop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.player_music_play : play(); break; case R.id.player_music_pause : pause(); break; case R.id.player_music_replay : replay(); break; case R.id.player_music_stop : stop(); break; } } /** * 停止 */ private void stop() { if (mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; player_music_play.setEnabled(true); } } /** * 重播 */ private void replay() { if (mediaPlayer != null){ mediaPlayer.seekTo(0); return; } play(); } /** * 暂停 */ private void pause() { if ("继续".equals(player_music_pause.getText().toString().trim())){ mediaPlayer.start(); player_music_pause.setText("暂停"); return; } if (mediaPlayer != null && mediaPlayer.isPlaying()){ mediaPlayer.pause(); player_music_pause.setText("继续"); return; } } /** * 播放 */ private void play() { String player_music_path = et_player_music.getText().toString().trim(); if (player_music_path.equals("")){ Toast.makeText(this,"请输入正确地址",1).show(); return; } try { mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(player_music_path); mediaPlayer.prepare(); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){ @Override public void onCompletion(MediaPlayer mp) { player_music_play.setEnabled(true); } }); mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener(){ @Override public boolean onError(MediaPlayer mp, int what, int extra) { player_music_play.setEnabled(true); return false; } }); long mtime = mediaPlayer.getDuration(); tv_player_music.setText("播放时长:" + timeParse(mtime)); player_music_play.setEnabled(false); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this,"播放失败",1).show(); } } //Android 音乐播放器应用里,读出的音乐时长为 long 类型以毫秒数为单位,例如:将 234736 转化为分钟和秒应为 03:55 (包含四舍五入) public static String timeParse(long duration) { String time = "" ; long minute = duration / 60000 ; long seconds = duration % 60000 ; long second = Math.round((float)seconds/1000) ; if( minute < 10 ){ time += "0" ; } time += minute+":" ; if( second < 10 ){ time += "0" ; } time += second ; return time ; } }
还没有评论,来说两句吧...