一下简单的MP3播放器代码示例,实现的功能很简单大致是:
1:通过ContentResolver查询到手机中的MP3歌曲信息
2:通过一个Listview显示列表,
3:用一个服务播放歌曲
4:通过手势向左,向右滑动来控件前一曲,后一曲,并停止播放控件
由于代码没有多大的复杂性,笔者就没有详细的注解,直接上代码:
K_musicActivity.java
public class K_musicActivity extends Activity implements OnTouchListener,
OnGestureListener {
private LinearLayout m_LinearLayout;
private ListView m_ListView;
private Intent i;
private Cursor cur;
private GestureDetector mGestureDetector;
private static final int FLING_MIN_DISTANCE = 50;
private static final int FLING_MIN_VELOCITY = 100;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// UI The bottommost LinearLayout
m_LinearLayout = new LinearLayout(this);
// Set up internal elements arranged
m_LinearLayout.setOrientation(LinearLayout.VERTICAL);
// Background color
m_LinearLayout.setBackgroundColor(Color.GREEN);
// listView Storage of list of songs
m_ListView = new ListView(this);
// Sets the listView element layout parameters
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
m_ListView.setBackgroundColor(Color.BLUE);
m_LinearLayout.addView(m_ListView, param);
// This activity of the ContentView set to m _LinearLayout
this.setContentView(m_LinearLayout);
// Query the media information
cur = this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
this.startManagingCursor(cur);
// 歌典的信息通过一个列表添加到 ListView中
ListAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_expandable_list_item_2, cur,
new String[] { MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST }, new int[] {
android.R.id.text1, android.R.id.text2 });
m_ListView.setAdapter(adapter);
// To play a song Service, this is an Action path
i = new Intent("com.kennan.music");
// Add click single songs to listen, to choose to play the song
m_ListView.setOnItemClickListener(clictlistener);
// Gestures detectors for a gesture capture, playback, implement stop playing
mGestureDetector = new GestureDetector(this);
// Add a touch of listening, and implementation of gestures
m_LinearLayout.setLongClickable(true);
m_LinearLayout.setOnTouchListener(this);
m_ListView.setLongClickable(true);
m_ListView.setOnTouchListener(this);
}
/**
* Click on a single song listening, and choose to play the song
*/
private AdapterView.OnItemClickListener clictlistener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
// The song information moves the cursor to be click Department songs
cur.moveToPosition(position);
// Gets the URI of the song
String data = cur.getString(cur
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
// The legend of the songs to the URI of the Service to play a song
i.putExtra("data", data);
}
};
@Override
public boolean onTouch(View v, MotionEvent event) {
// OnGestureListener will analyzes the given motion event
return mGestureDetector.onTouchEvent(event);
}
/**
* Sliding events, to the right activities began playing the song, to the left to play to stop playing the song
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// Parameters:
// e1 ACTION: 1st _DOWN MotionEvent
// e2 : The last ACTION _MOVE MotionEvent
// velocityX : The x axis of movement speed, pixel / Seconds
// velocityY : Y movement speed, pixel / Seconds
// The trigger conditions:
// X The coordinate of the displacement of the shaft is greater than the FLING _MIN_DISTANCE And move faster than FLING _MIN_VELOCITY Pixels / Seconds
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling left
K_musicActivity.this.stopService(i);
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling right
// Close the currently playing service , Avoid multiple service simultaneously play
K_musicActivity.this.stopService(i);
K_musicActivity.this.startService(i);
}
return false;
}
// Touch the touchscreen user, 1 MotionEvent ACTION _DOWN Trigger
@Override
public boolean onDown(MotionEvent e) {
return false;
}
// Touch the touchscreen user, has not yet been released or drag from a 1 MotionEvent ACTION _DOWN Trigger
// Note and onDown () The difference, to emphasize that there is no release or drag status
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
// User (touch screen) release, consists of a 1 MotionEvent ACTION _UP Trigger
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
// User long by touch screen, consists of multiple MotionEvent ACTION _DOWN Trigger
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
// The user presses the touch screen, and drag ACTION by 1 MotionEvent _DOWN, Multiple ACTION _MOVE Trigger
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
}
KMusicService.java服务类
public class KMusicService extends Service {
private MediaPlayer player;
public IBinder onBind(Intent arg0) {
return null;
}
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
// Get songs from a from URI activity
String uri = intent.getStringExtra("data");
player = new MediaPlayer();
try {
player.setDataSource(uri);
player.prepare();
} catch (IllegalArgumentException 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();
}
player.start();
}
public Service getService(){
return this;
}
public void onDestroy() {
player.stop();
super.onDestroy();
}
}
项目功能配置文件AndroidManifest.xml
< ?xml version="1.0" encoding="utf-8"?>
< manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kennan.k_music"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".K_musicActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="KMusicService">
<intent-filter>
<action android:name="com.kennan.music" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
< /application>
<uses-sdk android:minSdkVersion="7" />
< /manifest>