新建项目:
1 New Android Project->
2 Project name:androidPlayer
3 Build Target:Android 2.2
4 Application name: androidPlayer
5 Package name:com.b510
6 Create Activity:PlayActivity
7 Min SDK Version:9
8 Finish
项目结构:
运行效果:
代码部分:
AndroidManifast.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="cn.itcast.audio"
4 android:versionCode="1"
5 android:versionName="1.0">
6 <uses-sdk android:minSdkVersion="8" />
7
8 <application android:icon="@drawable/icon" android:label="@string/app_name">
9 <activity android:name=".PlayActivity"
10 android:label="@string/app_name">
11 <intent-filter>
12 <action android:name="android.intent.action.MAIN" />
13 <category android:name="android.intent.category.LAUNCHER" />
14 </intent-filter>
15 </activity>
16
17 </application>
18 <!-- sdcard权限 -->
19 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
20 </uses-permission>
21 </manifest>
strings.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <string name="hello">Hello World, PlayActivity!</string>
4 <string name="app_name">音乐播放器</string>
5 <string name="filename">文件名称</string>
6 <string name="play">播放</string>
7 <string name="pause">暂停</string>
8 <string name="continue1">继续</string>
9 <string name="reset">重播</string>
10 <string name="stop">停止</string>
11 <string name="musicname">shiqi.mp3</string>
12 </resources>
main.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/filename"
11 />
12 <EditText
13 android:id="@+id/filename"
14 android:layout_width="fill_parent"
15 android:layout_height="wrap_content"
16 android:text="@string/musicname"
17 />
18 <LinearLayout
19 android:orientation="horizontal"
20 android:layout_width="fill_parent"
21 android:layout_height="wrap_content"
22 >
23 <Button
24 android:id="@+id/play"
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:text="@string/play"
28 />
29 <Button
30 android:id="@+id/pause"
31 android:layout_width="wrap_content"
32 android:layout_height="wrap_content"
33 android:text="@string/pause"
34 />
35 <Button
36 android:id="@+id/reset"
37 android:layout_width="wrap_content"
38 android:layout_height="wrap_content"
39 android:text="@string/reset"
40 />
41 <Button
42 android:id="@+id/stop"
43 android:layout_width="wrap_content"
44 android:layout_height="wrap_content"
45 android:text="@string/stop"
46 />
47 </LinearLayout>
48 </LinearLayout>
PlayActivity.java
1 package com.b510;
2
3 import java.io.File;
4 import java.io.IOException;
5
6 import android.app.Activity;
7 import android.media.MediaPlayer;
8 import android.os.Bundle;
9 import android.os.Environment;
10 import android.util.Log;
11 import android.view.View;
12 import android.view.View.OnClickListener;
13 import android.widget.Button;
14 import android.widget.EditText;
15
16 public class MainActivity extends Activity {
17 protected static final String TAG = "MainActivity";
18 /** 文件名称 */
19 private EditText et_filename;
20 /** 播放按钮 */
21 private Button btn_play;
22 /** 暂停按钮 */
23 private Button btn_pause;
24 /** 重播按钮 */
25 private Button btn_reset;
26 /** 停止按钮 */
27 private Button btn_stop;
28 /** 得到文件名称 */
29 private String filename;
30 /** 定义一个播放器对象 */
31 private MediaPlayer mediaPlayer;
32 /** 保存当前音乐播放点 */
33 private int currentPosition;
34
35 /** Called when the activity is first created. */
36 @Override
37 public void onCreate(Bundle savedInstanceState) {
38 super.onCreate(savedInstanceState);
39 setContentView(R.layout.main);
40 mediaPlayer = new MediaPlayer();
41
42 et_filename = (EditText) findViewById(R.id.et_filename);
43
44 btn_play = (Button) findViewById(R.id.btn_play);
45 btn_pause = (Button) findViewById(R.id.btn_pause);
46 btn_reset = (Button) findViewById(R.id.btn_reset);
47 btn_stop = (Button) findViewById(R.id.btn_stop);
48
49 btn_play.setOnClickListener(listener);
50 btn_pause.setOnClickListener(listener);
51 btn_reset.setOnClickListener(listener);
52 btn_stop.setOnClickListener(listener);
53 }
54
55 /**
56 * 当MainActivity调用onDestroy方法的时候</br>
57 * 播放器释放资源
58 */
59 @Override
60 protected void onDestroy() {
61 super.onDestroy();
62 mediaPlayer.release();
63 }
64
65 /**
66 * 定义按钮的监听器
67 */
68 private OnClickListener listener = new OnClickListener() {
69
70 public void onClick(View v) {
71 Button button = (Button) v;
72 try {
73 switch (v.getId()) {
74 case R.id.btn_play:
75 play();
76 break;
77 case R.id.btn_pause:
78 if (mediaPlayer.isPlaying()) {
79 mediaPlayer.pause();
80 button.setText(R.string.continues);
81 } else {
82 mediaPlayer.start();
83 button.setText(R.string.pause);
84 }
85 break;
86 case R.id.btn_reset:
87 if (mediaPlayer.isPlaying()) {
88 mediaPlayer.seekTo(0);
89 } else {
90 play();
91 }
92 break;
93 case R.id.btn_stop:
94 if (mediaPlayer.isPlaying()) {
95 mediaPlayer.stop();
96 }
97 break;
98 }
99 } catch (IOException e) {
100 Log.i(TAG, e.toString());
101 }
102 }
103 };
104 /**
105 * 把播放动作抽出来,当度定义为play方法
106 * @throws IOException
107 */
108 private void play() throws IOException {
109 filename = et_filename.getText().toString();
110 File androidFile = new File(Environment.getExternalStorageDirectory(),
111 filename);
112 mediaPlayer.reset();
113 mediaPlayer.setDataSource(androidFile.getAbsolutePath());
114 mediaPlayer.prepare();
115 mediaPlayer.start();
116 }
117
118 /**
119 * 如果突然电话到来,此时就停止播放音乐
120 */
121 @Override
122 protected void onPause() {
123 super.onPause();
124 //如果音乐正在播放,则取得音乐的当前位置
125 if(mediaPlayer.isPlaying()){
126 currentPosition=mediaPlayer.getCurrentPosition();
127 mediaPlayer.stop();
128 }
129 }
130
131 /**
132 * 如果电话结束了,就应该恢复当前播放
133 */
134 @Override
135 protected void onResume() {
136 super.onResume();
137 //如果当前的播放帧currentPosition>0并且播放音乐文件名称不为空
138 //就恢复当前播放,并且把currentPosition位置设置到0,以便下次使用
139 if(currentPosition>0&&filename!=null){
140 try {
141 play();
142 mediaPlayer.seekTo(currentPosition);
143 currentPosition=0;
144 } catch (IOException e) {
145 e.printStackTrace();
146 }
147 }
148 }
149
150 /**
151 * 在系统杀死activity后,当用户接完电话后,会重新回到这个activity</br>
152 * 系统会自动帮我们创建这个activity,先执行onCreate()方法</br>
153 * 在执行onRestoreInstanceState()方法,我们在这个方法中</br>
154 * Bundle中保存的数据恢复
155 */
156 @Override
157 protected void onRestoreInstanceState(Bundle savedInstanceState) {
158 super.onRestoreInstanceState(savedInstanceState);
159 filename=savedInstanceState.getString("filename");
160 currentPosition=savedInstanceState.getInt("currentPosition");
161 }
162
163 /**
164 * 当一些位置情况发生的时候,导致Activity不可见了</br>
165 * 系统可能会杀死掉这个activity,如果我们想再系统杀死activity</br>
166 * 之前缓存一些需要的数据,这里保存的数据是播放的文件和当前播放的位置
167 */
168 @Override
169 protected void onSaveInstanceState(Bundle outState) {
170 super.onSaveInstanceState(outState);
171 outState.putString("filename", filename);
172 outState.putInt("currentPosition", currentPosition);
173 }
174 }
============================================
android sdcard配置
步骤1:
mksdcard -l mycard 100M E:\android_sdcard.img 如果你的环境变量配置正确,输入这句命令就建立了一个100M的虚拟SD-Card。
命令分析:-l mycard ,-l 后面跟的是磁盘卷标,如g就代表g盘,卷标可以随便写自己喜欢的名字。
100M 为虚拟SD-card大小,可以写M(兆),也可以写K随自己喜欢,只要一个够自己用的大小就可以了,还要注意你放置虚拟card的空间,必须要大于你的虚拟card。
E:\android_sdcard.img 虚拟card目录和文件名,目录随自己喜欢放置,android_card.img虚拟card文件名,名字随自己喜欢写,后缀名也随自己喜欢随便命名,如(.abc)。
步骤2:
在Eclipse中配置
SD Card:File
Hardware:new -- >SD Card support
6.2.window-- >Preferences-- >Android-- >Launch
点击Apply,再点击ok,
这样android的sdcard就在eclipse中配置好了。
启动刚才配置好的模拟器AVD2.3.1,打开File Explorer,就会出现sdcard,点击右上角的导入图标,把shiqi.mp3导入进去。