androidmusic源碼
⑴ android添加背景音樂代碼,越詳細越好。
可以通過Service來播放背景音樂,以下是實現代碼:
1.在AndroidManifest.xml文件中的<application>標簽內加入下邊語句
<service android:name=".MusicServer">
<intent-filter>
<action android:name="com.angel.Android.MUSIC"/>
<category android:name="android.intent.category.default" />
</intent-filter>
</service>
2.新建MusicServer.java類,內容為
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class MusicServer extends Service {
private MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onStart(Intent intent,int startId){
super.onStart(intent, startId);
if(mediaPlayer==null){
// R.raw.mmp是資源文件,MP3格式的
mediaPlayer = MediaPlayer.create(this, R.raw.abc);
mediaPlayer.setLooping(true);
mediaPlayer.start();
}
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mediaPlayer.stop();
}
}
3.將歌曲放入raw文件夾下,名稱為abc。
4.在Activity中加入代碼
private Intent intent = new Intent("com.angel.Android.MUSIC");
onCreate方法中加入startService(intent);
就可以播放了。
⑵ android 如何實現音樂播放
在Android平台下,要實現聲音的播放是十分容易實現的,只要生成一個MediaPlayer對象,並調用它的相關方法,就能改變對聲音播放進行控制。MediaPlayer對象有一下各種狀態:

  熟悉了MediaPlayer對象的各種狀態後以及轉換條件,就能很好的控制媒體播放。
例如:播放res/raw文件夾中的歌曲十分簡單,只需寫如下代碼:
MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();
 也可以指定音樂文件的位置來進行播放,例如,在sdcard根目錄下有有一首歌曲:test.mp3。則可以這樣播放:
    MediaPlayer mp = new MediaPlayer();
    String song = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test.mp3";
    try {
      mp.setDataSource(song);
      mp.prepare();
      mp.start();
    } catch (Exception e) {
      e.printStackTrace();
    }
建議在播放音樂的時候把MediaPlayer放在Service中,因為如果放在Activity中會使得界面特別卡。而且音樂不能放到後台里播放,一旦退出Activity,音樂就會暫停播放。
可以在Activity中布局相關的界面,例如按鈕等。然後通過這個Activitiy來啟動這個Service。要通過UI與Service交互,可以通過Intent對象傳遞消息。更復雜一些,要實現Service向Activity發送消息,並利用這些消息來更新UI,這可以用廣播機制,例如告訴Activity是否正在播放,播放進度,當前播放歌曲條目等信息。
例如以下實例代碼:
/*Activity中*/
@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btnPlay = (Button)findViewById(R.id.btnPlay);
    btnPause = (Button)findViewById(R.id.btnPause);
    btnPlay.setOnClickListener(new OnClickListener() {
      
      @Override
      public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this,SoundService.class);
        intent.putExtra("playing", true);
        startService(intent);
      }
    });
    
   btnPause.setOnClickListener(new OnClickListener() {
      
      @Override
      public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this,SoundService.class);
        intent.putExtra("playing", false);
        startService(intent);
      }
    });
  }
}
播放音樂的Service代碼:
package com.yzy.sound;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class SoundService extends Service {
  private MediaPlayer mp;
  @Override
  public void onCreate() {
    super.onCreate();
    mp = MediaPlayer.create(this, R.raw.test);
  }
  @Override
  public void onDestroy() {
    super.onDestroy();
    mp.release();
    stopSelf();
  }
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    boolean playing = intent.getBooleanExtra("playing", false);
    if (playing) {
      mp.start();
    } else {
      mp.pause();
    }
    return super.onStartCommand(intent, flags, startId);
  }
  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }
}
⑶ Android開發音樂播放器,如何實現單曲循環,順序播放,隨機播放,全部循環功能,高分求助
MediaPlayer 對象調用setLooping(true);是循環播放。
順序播放,隨機播放,全部循環功能 這些就是自己寫方法實現就好了,
順序播放就是當一首歌播放完後,在播放列表中找到它下一首歌的ID,直到全部完成。
隨機播放就是當一首歌播放完後,在播放列表中隨機抽取一首歌的ID(排除已經播放),直到全部完成。
全部循環就是順序播放全部歌曲,到最後一首之後從第一首播放。
⑷ 最近在看android音樂播放器的源碼,發現播放音樂等操作都是用service來進行的,這樣做有什麼好處求解
首先service的啟動方式有兩種,Context.startService()方式啟動和Context.bindService()方式啟動.前者如果你的程序退出時不停止Service,它會在後台一直運行.後者是跟你的程序綁定了,你的程序退出時Service也停止了.詳細的你去查一下.用Service的好處就是當你的程序進入後台時,不影響音樂的播放.如果沒有把播放音樂寫在Service中當你的播放器進入後台或者退出時音樂就停止了.
⑸ android中音樂如何網路獲取專輯封面圖片
該圖片為使用如下代碼解析得到:
 
參考源碼中,音樂目錄:
packages/apps/Music/src/com/android/music/MusicUtils.java中函數:getArtwork(context, song_id, album_id, true)
public static Bitmap getArtwork(Context context, long song_id, long album_id,
            boolean allowdefault) {
        if (album_id < 0) {
            // This is something that is not in the database, so get the album art directly
            // from the file.
            if (song_id >= 0) {
                Bitmap bm = getArtworkFromFile(context, song_id, -1);
                if (bm != null) {
                    return bm;
                }
            }
            if (allowdefault) {
                return getDefaultArtwork(context);
            }
            return null;
        }
        ContentResolver res = context.getContentResolver();
        Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);
        if (uri != null) {
            InputStream in = null;
            try {
                in = res.openInputStream(uri);
                return BitmapFactory.decodeStream(in, null, sBitmapOptions);
            } catch (FileNotFoundException ex) {
                // The album art thumbnail does not actually exist. Maybe the user deleted it, or
                // maybe it never existed to begin with.
                Bitmap bm = getArtworkFromFile(context, song_id, album_id);
                if (bm != null) {
                    if (bm.getConfig() == null) {
                        bm = bm.(Bitmap.Config.RGB_565, false);
                        if (bm == null && allowdefault) {
                            return getDefaultArtwork(context);
                        }
                    }
                } else if (allowdefault) {
                    bm = getDefaultArtwork(context);
                }
                return bm;
            } finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                }
            }
        }
        
        return null;
    }
    
    private static Bitmap getArtworkFromFile(Context context, long songid, long albumid) {
        Bitmap bm = null;
        byte [] art = null;
        String path = null;
        if (albumid < 0 && songid < 0) {
            throw new IllegalArgumentException("Must specify an album or a song id");
        }
        try {
            if (albumid < 0) {
                Uri uri = Uri.parse("content://media/external/audio/media/" + songid + "/albumart");
                ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
                if (pfd != null) {
                    FileDescriptor fd = pfd.getFileDescriptor();
                    bm = BitmapFactory.decodeFileDescriptor(fd);
                }
            } else {
                Uri uri = ContentUris.withAppendedId(sArtworkUri, albumid);
                ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
                if (pfd != null) {
                    FileDescriptor fd = pfd.getFileDescriptor();
                    bm = BitmapFactory.decodeFileDescriptor(fd);
                }
            }
        } catch (FileNotFoundException ex) {
 
        }
        if (bm != null) {
            mCachedBit = bm;
        }
        return bm;
    }
    
    private static Bitmap getDefaultArtwork(Context context) {
        BitmapFactory.Options opts = new BitmapFactory.Options();
        opts.inPreferredConfig = Bitmap.Config.RGB_565;        
        return BitmapFactory.decodeStream(
                context.getResources().openRawResource(R.drawable.play_img_default), null, opts);               
    }
private static final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
    private static final BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options();
    private static Bitmap mCachedBit = null;
獲取cursor:
myCur = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM_ID}, null,null, null);
myCur.moveToPosition(position);
設置專輯封面圖片:
long songid = myCur.getLong(3);
long albumid = myCur.getLong(7);
Bitmap bm = MusicUtils.getArtwork(this, songid, albumid,true);
if(bm != null){
Log.d(TAG,"bm is not null==========================");
playImg.setImageBitmap(bm);
}else{
Log.d(TAG,"bm is null============================");
}
