編輯:Android開發實例
本講內容:Android中的音頻和視頻使用入門指南
Android 提供了 MediaPlayer 和 MediaRecorder 兩個工具類,來幫助開發者操作音頻和視頻。我們通過兩個小例子來學習一下多媒體資源的使用。
一、 簡單音樂播放器
1、新建一個項目Lesson28_Music , 主Activity的名字是 MainMusic.java
2、拷貝 這幾張圖片到res/drawable目錄下,並建立3個xml文件,拷貝love.mp3到res/raw文件中。
play.xml
<?xml version="1.0" encoding="utf-8"?>
pause.xml
<?xml version="1.0" encoding="utf-8"?>
stop.xml
<?xml version="1.0" encoding="utf-8"?>
3、res/layout/main.xml 的內容如下:
<?xml version="1.0" encoding="utf-8"?>
4、MainMusic.java的內容如下:
package android.basic.lesson28; import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnPreparedListener; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.Toast; public class MainMusic extends Activity { // 聲明變量 private ImageButton play, pause, stop; private MediaPlayer mPlayer; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 定義UI組件 play = (ImageButton) findViewById(R.id.play); pause = (ImageButton) findViewById(R.id.pause); stop = (ImageButton) findViewById(R.id.stop); // 按鈕先全部失效 play.setEnabled(false); pause.setEnabled(false); stop.setEnabled(false); // 定義單擊監聽器 OnClickListener ocl = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.play: // 播放 Toast.makeText(MainMusic.this, "點擊播放", Toast.LENGTH_SHORT) .show(); play(); break; case R.id.pause: // 暫停 Toast.makeText(MainMusic.this, "暫停播放", Toast.LENGTH_SHORT) .show(); pause(); break; case R.id.stop: // 停止 Toast.makeText(MainMusic.this, "停止播放", Toast.LENGTH_SHORT) .show(); stop(); break; } } }; // 綁定單擊監聽 play.setOnClickListener(ocl); pause.setOnClickListener(ocl); stop.setOnClickListener(ocl); // 初始化 initMediaPlayer(); } // 初始化播放器 private void initMediaPlayer() { // 定義播放器 mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.love); // 定義資源准備好的監聽器 mPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 資源准備好了再讓播放器按鈕有效 Toast.makeText(MainMusic.this, "onPrepared", Toast.LENGTH_SHORT) .show(); play.setEnabled(true); } }); // 定義播放完成監聽器 mPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Toast.makeText(MainMusic.this, "onCompletion", Toast.LENGTH_SHORT).show(); stop(); } }); } // 停止播放 private void stop() { mPlayer.stop(); pause.setEnabled(false); stop.setEnabled(false); try { mPlayer.prepare(); mPlayer.seekTo(0); play.setEnabled(true); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 播放 private void play() { mPlayer.start(); play.setEnabled(false); pause.setEnabled(true); stop.setEnabled(true); } // 暫停 private void pause() { mPlayer.pause(); play.setEnabled(true); pause.setEnabled(false); stop.setEnabled(true); } // Activity銷毀前停止播放 @Override protected void onDestroy() { super.onDestroy(); if (stop.isEnabled()) { stop(); } } }
5、運行程序,查看效果
二、簡單視頻播放器
Android為視頻播放提供了VideoView 和 MediaController 兩個現成的組件,讓我們可以方便的實現MP4、3GP等視頻的播放。下面我們通過一個例子來看一下:
1、新建一個項目 Lesson28_Video
2、使用 Format Factory 這個軟件壓縮一個視頻備用,我這裡壓縮的參數如下:
注意,如果播放時完全無法播放或者只有聲音沒有圖像,你就需要換壓縮軟件和調整壓縮參數重新壓縮視頻了,暫時只能這樣,我也是折騰了2-3小時都是黑屏,郁悶中(似乎得出一個答案,是否黑屏和機器設備的性能有關,我降低壓縮分辨率和每秒幀數,出圖像音畫同步,如果提高每秒幀數,聲音出來後十幾秒圖像才會出來,但是出來後音畫還是同步的,有興趣的朋友可以多測試測試給出一個結論)。
用命令行的方式拷貝此視頻到存儲卡(sdcard)中,為什麼不用eclipse中的可視化工具拷貝呢?因為那個方式靠大文件的時候經常失敗,而命令行方式我沒拷貝失敗一次過。命令就是 adb push ,具體截個圖給你看:
3、res\layout\main.xml的內容如下:
<?xml version="1.0" encoding="utf-8"?>
4、MainVideo.java的內容如下:
package android.basic.lesson28; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; import android.widget.MediaController; import android.widget.VideoView; public class MainVideo extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //全屏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //標題去掉 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //要在全屏等設置完畢後再加載布局 setContentView(R.layout.main); //定義UI組件 VideoView videoView = (VideoView) findViewById(R.id.VideoView01); //定義MediaController對象 MediaController mediaController = new MediaController(this); //把MediaController對象綁定到VideoView上 mediaController.setAnchorView(videoView); //設置VideoView的控制器是mediaController videoView.setMediaController(mediaController); //這兩種方法都可以 videoView.setVideoPath("file:///sdcard/love_480320.mp4"); videoView.setVideoURI(Uri.parse("/sdcard/love_480320.mp4")); //啟動後就播放 videoView.start(); } }
5、運行效果如下:
三、簡單錄音程序
1、新建一個一個項目 Tip_Recorder,主activity名字是 MainActivity
2、其布局文件main.xml的代碼是:
<?xml version="1.0" encoding="utf-8"?>
3、主程序文件 MainActivity.java的代碼如下:
package android.tip.yaoyao; import java.io.File; import java.io.IOException; import java.util.Calendar; import java.util.Locale; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.text.format.DateFormat; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private Button recordButton; private Button stopButton; private MediaRecorder mr; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); recordButton = (Button) this.findViewById(R.id.Button01); stopButton = (Button) this.findViewById(R.id.Button02); // 錄音按鈕點擊事件 recordButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { File file = new File("/sdcard/" + "YY" + new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".amr"); Toast.makeText(getApplicationContext(), "正在錄音,錄音文件在"+file.getAbsolutePath(), Toast.LENGTH_LONG) .show(); // 創建錄音對象 mr = new MediaRecorder(); // 從麥克風源進行錄音 mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT); // 設置輸出格式 mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // 設置編碼格式 mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // 設置輸出文件 mr.setOutputFile(file.getAbsolutePath()); try { // 創建文件 file.createNewFile(); // 准備錄制 mr.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 開始錄制 mr.start(); recordButton.setText("錄音中……"); } }); // 停止按鈕點擊事件 stopButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mr != null) { mr.stop(); mr.release(); mr = null; recordButton.setText("錄音"); Toast.makeText(getApplicationContext(), "錄音完畢", Toast.LENGTH_LONG).show(); } } }); } }
4、因為錄音和寫存儲卡都需要權限聲明,所以這裡也把AndroidManifest.xml代碼提供出來:
<?xml version="1.0" encoding="utf-8"?>
5、編譯並運行程序,查看結果。
點擊錄音:
錄音文件在存儲卡的根目錄幾個以YY開頭的amr文件
6、這個例子要用到錄音設備,而模擬器並不能把電腦聲卡模擬出來使用,因此這個例子必須在真機上進行測試。 真機上測試方法也很簡單。
上面的真機截圖也是通過Eclipse的DDMS窗口直接抓取的,下圖中右上角顏色最深的圖標就是抓取真機截圖的按鈕:
好了本講內容就到這裡,下次再見。
一、 實現拍照、選擇圖片並裁剪圖片效果 按照之前博客的風格,首先看下實現效果。 二、 uCrop項目應用 想起之前看到
Android作為一個偉大的系統,自然提供了設置默認打開程序的實現.在這篇文章中,我會介紹如何在Android系統中設置默認的程序. 在設置默認程序之前,無非有兩
學習目的: 1、掌握在Android中如何建立RadioGroup和RadioButton 2、掌握RadioGroup的常用屬性 3、理解RadioButton
本文主要講解Android應用程序簽名相關的理論知識,包括:什麼是簽名、為什麼要給應用程序簽名、如何給應用程序簽名等。 1、什麼是簽名? &