android 添加视频、图片、录音上传(二)
2015-08-20 21:01
549 查看
实现长按按钮开始录音,结束后在gridview中显示,点击播放。
item_voicelist.xml
[code] @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
[code]<?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>
[code]<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>
相关文章推荐
- android 添加视频、图片、录音上传(一)
- Android中的缩略图加载-不浪费一点多余的内存
- Android(java)学习笔记184:生成4种模式的文件
- android之BitmapFactory.Options的使用
- Android学习【1】解决android摄像头预览的变形问题
- Android组件之间的信使Intent
- Android-用你自己的自定义图像资源(2)
- android usb解析(一)(and5.1)
- Android 内存泄露检测工具 LeakCanary
- Android性能优化典例(一)
- Android性能优化典例(一)
- Android NDK编译常见错误及解决方案
- Android 按下电源按钮关闭小学习过程的整个长度
- android音乐柱状频谱实现
- android 中resources管理
- android 组件radioGroup实例
- android开发环境搭建日记和嵌入式Android开发环境初探
- Android中的IPC通信(一)
- Android如何判断一个应用在运行
- 将android界面背景设置为黑色