实现长按按钮开始录音,结束后在gridview中显示,点击播放。
@AbIocView(id = R.id.addVoice)
Button addVoice;
@AbIocView(id = R.id.addvoicegridview)
GridView addvoicegridview;
@AbIocView(id = R.id.horizontalScrollView_addvoice)
HorizontalScrollView horizontalScrollView_addvoice;
/** 语音列表适配器 */
private MyGridAdapter mAdapter;
/** 语音列表 */
private ArrayList<String> mVoicesList;
/** 语音名称列表 */
private List<String> mVoicesListname;
/** 录音存储路径 */
private static final String PATH = "/sdcard/MyVoiceForder/Record/";
/** 用于语音播放 */
private MediaPlayer mPlayer = null;
/** 用于完成录音 */
private MediaRecorder mRecorder = null;
/** 语音文件保存路径 */
private String mFileName = null;
/** 语音文件显示名称 */
private String mFileNameShow = null;
/**
* 列宽
*/
private int cWidth = 500;
/**
* 水平间距
*/
private int hSpacing = 10;
/** 初始化数据 */
private void initData() {
mVoicesList = new ArrayList<String>();
mVoicesListname = new ArrayList<String>();
mPlayer = new MediaPlayer();
}
private void initGridView() {
MyGridAdapter mAdapter = new MyGridAdapter(context);
addvoicegridview.setAdapter(mAdapter);
LayoutParams params = new LayoutParams(mAdapter.getCount()
* (cWidth + hSpacing), LayoutParams.WRAP_CONTENT);
addvoicegridview.setLayoutParams(params);
addvoicegridview.setColumnWidth(cWidth);
addvoicegridview.setHorizontalSpacing(hSpacing);
addvoicegridview.setStretchMode(GridView.NO_STRETCH);
addvoicegridview.setNumColumns(mAdapter.getCount());
addvoicegridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
try {
mPlayer.reset();
mPlayer.setDataSource(mVoicesList.get(position));
mPlayer.prepare();
mPlayer.start();
} catch (IOException e) {
Log.e(TAG, "播放失败");
}
}
});
addvoicegridview
.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0,
View arg1, int arg2, long arg3) {
mVoicesList.remove(arg2);
mVoicesListname.remove(arg2);
initGridView();
return false;
}
});
}
private void initUi() {
horizontalScrollView_addvoice.setHorizontalScrollBarEnabled(true);
initGridView();
addVoice.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (commitId.equals("0")) {
Toast.makeText(getApplicationContext(), "请先保存上面的信息", 0)
.show();
}else{
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mVoicesList.size() >= 1) {
Toast.makeText(getApplicationContext(), "只能上传一个录音", 0)
.show();
} else {
startVoice();
}
break;
case MotionEvent.ACTION_UP:
if (mVoicesList.size() >= 1) {
} else {
stopVoice();
}
break;
default:
break;
}
}
return false;
}
});
OnClickListener keyboard_hide = new OnClickListener() {
@Override
public void onClick(View v) {
InputMethodManager imm = (InputMethodManager) AddZhiliangSendActivity.this
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
};
addxiapai_full.setClickable(true);
addxiapai_full.setOnClickListener(keyboard_hide);
}
/** 开始录音 */
private void startVoice() {
// 设置录音保存路径
mFileNameShow = UUID.randomUUID().toString();
mFileName = PATH + mFileNameShow + ".amr";
String state = android.os.Environment.getExternalStorageState();
if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) {
Log.i(TAG, "SD Card is not mounted,It is " + state + ".");
}
File directory = new File(mFileName).getParentFile();
if (!directory.exists() && !directory.mkdirs()) {
Log.i(TAG, "Path to file could not be created");
}
Toast.makeText(getApplicationContext(), "开始录音", 0).show();
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(TAG, "prepare() failed");
}
mRecorder.start();
}
/** 停止录音 */
@SuppressLint("NewApi")
private void stopVoice() {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
mVoicesList.add(mFileName);
mVoicesListname.add(mFileNameShow);
mAdapter = new MyGridAdapter(AddZhiliangSendActivity.this);
addvoicegridview.setAdapter(mAdapter);
initGridView();
// new FileHelper().submitUploadFile(mVoicesList, loginKey,commitId,"2");
Toast.makeText(getApplicationContext(), "保存录音" + mFileName, 0).show();
}
class MyGridAdapter extends BaseAdapter {
Context mContext;
LayoutInflater mInflater;
public MyGridAdapter(Context c) {
mContext = c;
mInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mVoicesList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int position, View contentView, ViewGroup arg2) {
contentView = mInflater.inflate(R.layout.item_voicelist, null);
TextView tv = (TextView) contentView.findViewById(R.id.tv_armName);
tv.setText(mVoicesListname.get(position) + ".amr");
return contentView;
}
}
item_voicelist.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/widget28"
android:layout_width="wrap_content" android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/tv_armName"
android:layout_width="fill_parent"
android:layout_height="70dp"
android:background="@drawable/chat_button_fillet_shape"
android:gravity="center"
android:text="123.arm" >
</TextView>
</RelativeLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<HorizontalScrollView
android:id="@+id/horizontalScrollView_addvoice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<GridView
android:id="@+id/addvoicegridview"
android:layout_width="match_parent"
android:layout_height="70dp" >
</GridView>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>