android程式設計實例入門 -Sample改寫分享 (2014/10/20)
此範例為程式碼(06\Sample02)的改寫,利用一個LinearLayout、三個Button來實作GUI界面,並透過3個按紐來控制MediaPlayer+MediaRecorder進行錄音&播放使用範例(ps由於並沒有讓MediaPlayer和MediaRecorder可見,所以不用放到LinearLayout中),程式碼如下所示:
package com.jashsample;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Random;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnKeyListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.format.DateFormat;
import android.text.method.KeyListener;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.ViewFlipper;
/*
* 建立1個MediaPlayer+1個MediaRecorder和3個按鈕,利用3個按紐來控制MediaPlayer+MediaRecorder進行錄音&播放。
*/
/*
--AndroidManifest內要新增的權限--
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
*/
public class MainActivity extends Activity {
Button[] bt = new Button[3] ;
MediaPlayer mp;
MediaRecorder mr;
File dir, f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
setContentView(ll);
for(int i=0; i<bt.length; i++)
{
bt[i] = new Button(this);
}
bt[0].setText("開始");//開始錄音
bt[1].setText("停止");//停止錄音
bt[2].setText("播放");//播放路音
bt[0].setEnabled(true);
bt[1].setEnabled(false);
bt[2].setEnabled(true);
File dir = new File(Environment.getExternalStorageDirectory(),"YASample");
if(dir.exists() == false)
{
dir.mkdir();
}
f = new File(dir, "Sample.3gp");
for(int i=0; i<bt.length; i++)
{
ll.addView(bt[i]);
bt[i].setOnClickListener(new SampleClickListener());
}
}
public void onResume()//在此時建立MediaPlayer實體
{
super.onResume();
mp = new MediaPlayer();
mr = new MediaRecorder();
mp.setOnCompletionListener(new SampleCompletionListener());//MediaPlayer初始化時定義按鈕狀態
}
public void onPause()//當畫面暫停,釋放MediaPlayer資源
{
super.onPause();
mp.release();
mr.release();
}
class SampleCompletionListener implements OnCompletionListener
{
public void onCompletion(MediaPlayer mp)
{
bt[0].setEnabled(true);
bt[1].setEnabled(false);
bt[2].setEnabled(false);
}
}
class SampleClickListener implements OnClickListener
{
public void onClick(View v)
{
if(v == bt[0])//所有按鈕共同回應事件,所以利用傳入值View判斷��哪個��元件來執行不同功能
{
bt[0].setEnabled(false);
bt[1].setEnabled(true);
bt[2].setEnabled(true);
try
{
mp.reset();
mr.setAudioSource(MediaRecorder.AudioSource.MIC);
mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
String path = f.getAbsolutePath();
mr.setOutputFile(path);
mr.prepare();
mp.setDataSource(path);
mr.start();
}
catch(Exception e)
{
}
}
else if(v == bt[1])
{
bt[0].setEnabled(true);
bt[1].setEnabled(false);
bt[2].setEnabled(true);
mr.stop();
mr.reset();
}
else if(v == bt[2])
{
bt[0].setEnabled(false);
bt[1].setEnabled(false);
bt[2].setEnabled(false);
try
{
mp.prepare();
}
catch(Exception e){}
mp.start();
}
}
}
}
沒有留言:
張貼留言