14天學會安卓開發(第十三天)Android多媒體開發

查志強發表於2014-06-25

【原文:http://blog.csdn.net/corder_raine/article/details/8317454

14天學會安卓開發  
作者:神祕的N (英文名  corder_raine)
聯絡方式:369428455(反饋)
交流群:284552167(示例,原文件下載)
版權為作者所有,如有轉載請註明出處
目錄       






第十三天.Android多媒體開發
13.1 播放音樂

13.1.1 多媒體架構
Ø  基於第三方Packet Video公司的Open Core platform實現
Ø  支援幾乎所有通用的音訊、視訊、靜態影象格式,包括:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。
Ø  通過Open Core程式設計師可以方便快速的開發出想要的多媒體應用程式,例如:音視訊的採集,回放,視訊會議,實時的流媒體播放等應用。
Ø  Android提供了MediaPlayer和MediaRecorder等上層的Media API給開發人員使用。
Ø  Open Core的程式碼在Android程式碼的External/Opencore目錄中。
13.1.2 Open Core框架
圖片1.jpg
13.1.3 呼叫層次關係
圖片2.jpg 
13.1.4 音樂播放
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
MediaPlayer mediaPlayer = newMediaPlayer();
if(mediaPlayer.isPlaying()) {
  mediaPlayer.reset();      //重置為初始狀態
}
mediaPlayer.setDataSource("/sdcard/good.mp3");
mediaPlayer.prepare();      //緩衝                         
mediaPlayer.start();           //開始或恢復播放
mediaPlayer.pause();         //暫停播放
mediaPlayer.start();           //恢復播放
mediaPlayer.stop();            //停止播放
mediaPlayer.release(); //釋放資源
mediaPlayer.setOnCompletionListener(newMediaPlayer.OnCompletionListener() {
       publicvoid onCompletion(MediaPlayer arg0) { //播放完畢呼叫
           mediaPlayer.release();
       } });
mediaPlayer.setOnErrorListener(newMediaPlayer.OnErrorListener() { // 錯誤處理事件
        publicboolean onError(MediaPlayer player, intarg1, intarg2) {
       mediaPlayer.release();
       returnfalse;
        } });


13.2 播放視訊

13.2.1 播放視訊
01
02
03
04
05
06
07
08
09
10
11
/* 建立VideoView物件 */
final VideoView videoView = (VideoView)findViewById(R.id.VideoView01);
/*設定視訊路徑*/
videoView.setVideoPath("/sdcard/test.mp4");
/* 設定模式-播放進度條 */
videoView.setMediaController(new MediaController(Activity01.this));
videoView.requestFocus();
/* 開始播放 */
videoView.start();
/* 暫停 */
videoView.pause();

13.2.2 音樂/視訊播放案例
Ø  音樂播放案例
u  MediaPlayerDemo
u  視訊播放案例
u  VideoViewDemo


13.3 錄製音訊

13.3.1 實現錄音功能
第一步:在功能清單檔案AndroidManifest.xml中新增錄音與寫sdcard許可權:

1
2
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>




第二步:編寫音訊燒錄程式碼:
01
02
03
04
05
06
07
08
09
10
11
MediaRecorder recorder = newMediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//從麥克風採集聲音
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//內容輸出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音訊編碼方式
recorder.setOutputFile("/sdcard/lxt008.amr");
recorder.prepare();          //預期準備
recorder.start();              //開始燒錄
...
recorder.stop();         //停止燒錄
recorder.reset();             //重設
recorder.release();           //燒錄完成一定要釋放資源


13.3.2 音視訊採集
第一步:在功能清單檔案AndroidManifest.xml中新增照相機許可權:


1
2
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
<uses-permissionandroid:name="android.permission.CAMERA"/>


第二步:編寫拍照程式碼:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);//獲取視窗服務
Display display =wm.getDefaultDisplay();//獲取螢幕資訊
recorder = newMediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//從照相機採集視訊
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoSize(display.getWidth(),display.getHeight());//大小為螢幕的寬和高
recorder.setVideoFrameRate(3);//每秒3幀
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//設定視訊編碼方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/lxt008.3gp");
recorder.prepare();//預期準備
recorder.start();  //開始燒錄
...
recorder.stop();//停止燒錄
recorder.reset();  //重設
recorder.release();//燒錄完成一定要釋放資源


13.4 拍攝照片

13.4.1 錄音/拍照案例
Ø錄音案例
uRecordAudioDemo
u
Ø拍照案例
uCameraDemo

13.5 鈴聲設定

13.5.1 鈴聲設定:設定各種鈴聲
01
02
03
04
05
06
07
08
09
10
11
//開啟系統鈴聲設定
Intent intent = newIntent(RingtoneManager.ACTION_RINGTONE_PICKER);
//設定鈴聲型別和title
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_RINGTONE);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE,“設定來電鈴聲");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_ALARM);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE,"設定鬧鈴鈴聲");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE,"設定通知鈴聲");
//當設定完成之後返回到當前的Activity
startActivityForResult(intent,ButtonAlarm);


13.5.2 鈴聲設定:回撥函式
1
2
3
4
5
6
7
8
9
/* 當設定鈴聲之後的回撥函式 */
protectedvoid onActivityResult(intrequestCode, intresultCode, Intent data){
//得到我們選擇的鈴聲
Uri pickedUri =data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
//將我們選擇的鈴聲設定成為預設
RingtoneManager.setActualDefaultRingtoneUri(Activity01.this,RingtoneManager.TYPE_RINGTONE, pickedUri);
Uri pickedUri =RingtoneManager.setActualDefaultRingtoneUri(Activity01.this,RingtoneManager.TYPE_ALARM, pickedUri);
RingtoneManager.setActualDefaultRingtoneUri(Activity01.this,RingtoneManager.TYPE_NOTIFICATION, pickedUri);
}


13.5.3 鈴聲設定:main.xml




01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"  android:layout_height="fill_parent" >
  <TextView
  android:id="@+id/TextView01"
  android:layout_width="fill_parent"   android:layout_height="wrap_content" 
  android:text="選擇下面按鈕來設定鈴聲" />
  <Button
  android:id="@+id/ButtonRingtone"
  android:layout_width="fill_parent"  android:layout_height="wrap_content"
  android:text="設定來電鈴聲"  />
  <Button
  android:id="@+id/ButtonAlarm"
  android:layout_width="fill_parent"  android:layout_height="wrap_content"
  android:text="設定鬧鐘鈴聲"  />
  <Button
  android:id="@+id/ButtonNotification"
  android:layout_width="fill_parent"  android:layout_height="wrap_content"
  android:text="設定通知鈴聲"  />
</LinearLayout>


13.5.4 鈴聲設定:AndroidManifest.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<manifestxmlns:android="http://schemas.android.com/apk/res/android"[/align]     package="com.yarin.android.Examples_07_08"
      android:versionCode="1"
      android:versionName="1.0">
    <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
        <activityandroid:name=".Activity01"
                  android:label="@string/app_name">
            <intent-filter>
                <actionandroid:name="android.intent.action.MAIN"/>
                <categoryandroid:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
    <uses-permissionandroid:name="android.permission.INTERNET"/>
    <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-sdkandroid:minSdkVersion="7"/>
</manifest>










相關文章