Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
°²×¿µÚÊ®ÆßÌì±Ê¼Ç--¼òÒ×°æ±¾ÒôÀÖ²¥·ÅÆ÷
 
×÷ÕߣºÉ­ÁÖÉ­ À´×ÔÓÚ£º²©¿ÍÔ° ·¢²¼ÓÚ 2016-4-1
  1592  次浏览      28
 

title:¼òÒ×°æ±¾ÒôÀÖ²¥·ÅÆ÷

1.²¼¾Ö

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal">

<Button
android:id="@+id/musicList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#86B2F4"
android:text="ÒôÀÖÎļþÁбí"
android:textColor="#fff"
android:textSize="28sp"/>

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/logo"/>

<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal">

<ImageButton
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/stop"/>

<ImageButton
android:id="@+id/pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pree"/>

<ImageButton
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play"/>

<ImageButton
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/next"/>
</LinearLayout>
</LinearLayout>

2.¹¤¾ßÀà

/**
* Created by Áõéª on 2016-03-05 19:39.
* Îļþ¹ýÂËÆ÷¹¤¾ßÀà,
* ÓÃÓÚ¹ýÂËÖ¸¶¨ºó׺µÄÎļþ
*/
public class MusicFileNameFilter implements FilenameFilter {

private String type;

public MusicFileNameFilter(String type) {
this.type = type;
}

@Override
public boolean accept(File dir, String filename) {
return filename.endsWith(type);
}
}

3.Binder½Ó¿Ú

public interface IMusicPlayerService {
public void callplay(String path);
;
public void callStop();

public boolean callIsPlaying();

public int callGetgetDuration();

public int callGetgetCurrentDuration();

public boolean callMediaIsNull();

public void callChanageSeek(int position);

public void callPause();
}
4. service

/**
* Created by Áõéª on 2016-03-05 20:32.
*
* ServieÒôÀÖ²¥·Å
*/
public class MusicPlayerService extends Service {
private MediaPlayer mediaPlayer;

private MusicPlayerBinder musicPlayerBinder = new MusicPlayerBinder();

private class MusicPlayerBinder extends Binder implements IMusicPlayerService {

public void callplay(String path) {

play(path);
}

@Override
public void callStop() {
stop();
}

@Override
public boolean callIsPlaying() {
return isPlaying();
}

@Override
public int callGetgetDuration() {
return getgetDuration();
}

@Override
public int callGetgetCurrentDuration() {
return getCurrentDuration();
}

@Override
public boolean callMediaIsNull() {
return mediaIsNull();
}

@Override
public void callChanageSeek(int position) {
chanageSeek(position);
}

@Override
public void callPause() {
pause();
}

}

@Nullable
@Override
public IBinder onBind(Intent intent) {

return musicPlayerBinder;
}

/**
* ³õʼ»¯
* @param path
*/
private void init(String path) {

if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
reset(path);
}else{
reset(path);
}
}

/**
* ×ÊÔ´ÖØÖÃ
* @param path
*/
private void reset(String path) {

try {
mediaPlayer.reset();
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();
mediaPlayer.setLooping(true);
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}

}

/**
* ²¥·Å
* @param path
*/
private void play(String path) {

/* if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
} else if (mediaPlayer != null&&!mediaPlayer.isPlaying()) {
mediaPlayer.start();
} else {
init(path);
}*/
init(path);

}

/**
* ÊDz»ÊÇÔÚ²¥·Å
* @return
*/
private boolean isPlaying(){
if(mediaPlayer!=null) {
return mediaPlayer.isPlaying();
}
return false;
}

/**
* »ñÈ¡×ܵĽø¶È
* @return
*/
private int getgetDuration(){
return mediaPlayer.getDuration();
}

/**
* »ñÈ¡µ±Ç°½ø¶È
* @return
*/
private int getCurrentDuration(){
return mediaPlayer.getCurrentPosition();
}

/**
* ÔÝÍ£
*/
private void pause(){
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else if(mediaPlayer!=null&&!mediaPlayer.isPlaying()){
mediaPlayer.start();
}
}

/**
* ֹͣ
*/
private void stop(){
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;

}
}

/**
* Åжϵ±Ç°ÊDz»ÊÇNULL
* @return
*/
private boolean mediaIsNull(){
return mediaPlayer==null;
}

private void chanageSeek(int position){
mediaPlayer.seekTo(position);
mediaPlayer.start();
}
}

5.Activity

 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//ÒôÀÖÎļþµÄĿ¼
private static final String PATH = Environment.getExternalStorageDirectory() + "/Music/";
private static final String TAG = "MainActivity";
//Îļþ·¾¶
private ArrayList<String> fileList = new ArrayList<String>();
//ÎļþÃû
private ArrayList<String> fileNameList = new ArrayList<String>();

/*
½ø¶ÈÌõ
*/
private SeekBar seekBar;
/*
ÒôÀÖÎļþÁбí
*/
private Button musicList;

/*
ÒôÀÖ¿ØÖư´¼ü
*/
private ImageButton stop;
private ImageButton pre;
private ImageButton play;
private ImageButton next;
//µ¥Ê×ÒôÀֵķ¾¶
private String musicPath;

private IMusicPlayerService mPlayerService;

private MusicPlayerServiceConnection mConn;

private boolean mBound =false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
³õʼ»¯
*/
seekBar = (SeekBar) findViewById(R.id.seekBar);

musicList = (Button) findViewById(R.id.musicList);

stop = (ImageButton) findViewById(R.id.stop);
pre = (ImageButton) findViewById(R.id.pre);
;
play = (ImageButton) findViewById(R.id.play);
;
next = (ImageButton) findViewById(R.id.next);
;
File file = new File(PATH);

//»ñÈ¡ÎļþÁбí
File[] arrs = file.listFiles(new MusicFileNameFilter(".mp3"));

for (File f : arrs) {
//Ìí¼Óȫ·¾¶µ½ÎļþÁбí
fileList.add(f.getAbsolutePath());
//Ìí¼ÓÎļþ±íµ½ÎļþÁбí
fileNameList.add(f.getName());

}

/*
ÉèÖüàÌýÆ÷
*/
musicList.setOnClickListener(this);
stop.setOnClickListener(this);
pre.setOnClickListener(this);
play.setOnClickListener(this);
next.setOnClickListener(this);

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}
//Í϶¯½ø¶ÈÌõ,¸Ä±ä²¥·Å½ø¶È
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mPlayerService.callChanageSeek(seekBar.getProgress());
}
});

}

@Override
protected void onStart() {
super.onStart();
if(mConn==null){
mConn= new MusicPlayerServiceConnection();
}
Intent intent = new Intent(this,MusicPlayerService.class);
mBound = bindService(intent, mConn, BIND_AUTO_CREATE);

}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.musicList:
showList();
break;
case R.id.stop:
stop();
break;
case R.id.pre:
pre();
break;
case R.id.play:
play();
break;
case R.id.next:
next();
break;
}

}
/*
ÏÂÒ»Ê×
*/
private void next() {
int index = fileList.indexOf(musicPath);
if(index>=fileList.size()){
index=0;
}
mPlayerService.callplay(fileList.get(index+1));
}

/*
²¥·Å
*/
private void play() {
Log.d(TAG, "mBound" + mBound);
boolean isNull = mPlayerService.callMediaIsNull();
if(isNull) {
mPlayerService.callplay(musicPath);
}else{
mPlayerService.callPause();
}

if(mPlayerService.callIsPlaying()){
play.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.pause));
}else{
play.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.play));
}

//¸üнø¶È
new Thread(){

boolean isFinished=mPlayerService.callIsPlaying();
@Override
public void run() {
if(isFinished) {
while (isFinished) {
SystemClock.sleep(200);
int currentDuration = mPlayerService.callGetgetCurrentDuration();
int duration = mPlayerService.callGetgetDuration();
seekBar.setMax(duration);
seekBar.setProgress(currentDuration);
if (currentDuration >= duration) {
isFinished = false;
}
}
}

}
}.start();
}

/**
* ÉÏÒ»Ê×
*/
private void pre() {
int index = fileList.indexOf(musicPath);
if(index<=0){
index=fileList.size()-1;
}
mPlayerService.callplay(fileList.get(index-1));
}

/**
* Í£Ö¹²¥·Å
*/
private void stop() {
mPlayerService.callStop();
}

/**
* ÏÔʾÒôÀÖÁбí
*/
private void showList() {

Intent intent = new Intent(this,MusicListActivity.class);
//intent.putStringArrayListExtra("filelist",fileList);
intent.putStringArrayListExtra("filenamelist",fileNameList);

startActivityForResult(intent,100);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(data==null){
Toast.makeText(MainActivity.this, "ûÓнá¹û", Toast.LENGTH_SHORT).show();
return;
}
//»ñȡϱê
int position = data.getIntExtra("position", 0);
//ÉèÖÃÒôÀÖ·¾¶
musicPath = fileList.get(position);
// play();
Log.d(TAG,musicPath);
}

private class MusicPlayerServiceConnection implements ServiceConnection{

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mPlayerService = (IMusicPlayerService) service;
}

@Override
public void onServiceDisconnected(ComponentName name) {
if(mConn!=null){
mConn =null;
}
}
}

@Override
protected void onStop() {
super.onStop();
if(mConn!=null){
unbindService(mConn);
mConn=null;
mPlayerService=null;
}
}

@Override
protected void onDestroy() {
super.onDestroy();
if(mConn!=null){
unbindService(mConn);
mConn=null;
mPlayerService=null;
}
}
}

   
1592 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ