本文实例为大家分享了Android仿微信录制语音的具体代码,供大家参考,具体内容如下

前言

我把录音分成了两部分

1.UI界面,弹窗读秒

2.一个类(包含开始、停止、创建文件名功能)

第一部分

由于6.0权限问题,点击按钮申请权限通过则弹窗,如何申请权限

弹窗布局popw_record.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="260dp"

android:layout_marginLeft="50dp"

android:layout_marginRight="50dp"

android:background="@drawable/take_phone"

android:orientation="vertical">

android:id="@+id/close"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:padding="10dp"

android:src="@mipmap/guanbi" />

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_marginLeft="50dp"

android:layout_marginRight="50dp"

android:gravity="center"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/luyin" />

android:id="@+id/timer"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:format="%s" />

android:id="@+id/startRecord"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/playrecord"

android:layout_marginTop="20dp"

android:background="@color/background"

android:padding="10dp"

/>

弹弹弹

/**

* 开始录音

*/

private void showPopup() {

final View contentView = LayoutInflater.from(Orderdeatil.this).inflate(R.layout.popw_record, null);

mPopWindow = new PopupWindow(contentView, ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT, true);

mPopWindow.setContentView(contentView);

TextView startRe = (TextView) contentView.findViewById(R.id.startRecord);

startRe.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_UP://松开事件发生后执行代码的区域

if (mPopWindow != null) {

mPopWindow.dismiss();

sr.stopRecording();

}

break;

case MotionEvent.ACTION_DOWN://按住事件发生后执行代码的区域

Chronometer timer = (Chronometer) contentView.findViewById(R.id.timer);

timer.setBase(SystemClock.elapsedRealtime());//计时器清零

timer.start();//开始录音的提示

sr.startRecording();

break;

case MotionEvent.ACTION_CANCEL:

if (mPopWindow != null) {

mPopWindow.dismiss();

sr.stopRecording();//停止录音

}

break;

default:

break;

}

return true;

}

});

ImageView close = (ImageView) contentView.findViewById(R.id.close);

close.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

mPopWindow.dismiss();

}

});

mPopWindow.setTouchable(true);

mPopWindow.setFocusable(true);

mPopWindow.setBackgroundDrawable(new BitmapDrawable());

mPopWindow.setOutsideTouchable(true);

mPopWindow.setTouchInterceptor(new View.OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {

mPopWindow.dismiss();

return true;

}

return false;

}

});

View rootview = LayoutInflater.from(Orderdeatil.this).inflate(R.layout.activity_orderdeatil, null);

mPopWindow.showAtLocation(rootview, Gravity.CENTER, 0, 0);

}

第二部分 工具类

class SoundRecorder {

public void startRecording() {

mRecorder = new MediaRecorder();

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

mRecorder.setOutputFile(newFileName());

try {

// 准备好开始录音

mRecorder.prepare();

mRecorder.start();

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void stopRecording() {

if (mRecorder != null) {

//added by ouyang start

try {

//下面三个参数必须加,不加的话会奔溃,在mediarecorder.stop();

//报错为:RuntimeException:stop failed

mRecorder.setOnErrorListener(null);

mRecorder.setOnInfoListener(null);

mRecorder.setPreviewDisplay(null);

mRecorder.stop();

} catch (IllegalStateException e) {

// TODO: handle exception

Log.i("Exception", Log.getStackTraceString(e));

} catch (RuntimeException e) {

// TODO: handle exception

Log.i("Exception", Log.getStackTraceString(e));

} catch (Exception e) {

// TODO: handle exception

Log.i("Exception", Log.getStackTraceString(e));

}

//added by ouyang end

mRecorder.release();

mRecorder = null;

upRecord();

}

}

public String newFileName() {

mFileName = Environment.getExternalStorageDirectory()

.getAbsolutePath();

String s = new SimpleDateFormat("yyyy-MM-dd hhmmss")

.format(new Date());

return mFileName += "/rcd_" + s + ".mp3";

}

}

这是从我代码中择出来的,加上权限应该是可以的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:Android仿微信语音对讲录音功能

Android实现录音方法(仿微信语音、麦克风录音、发送语音、解决5.0以上BUG)

Android仿微信语音消息的录制和播放功能

Android仿微信发送语音消息的功能及示例代码

Android仿微信语音聊天界面设计

android仿微信聊天界面 语音录制功能

Android自定义UI实现微信语音

Android 高仿微信语音聊天页面高斯模糊(毛玻璃效果)

Android仿微信语音聊天功能

Android自定义View实现微信语音界面

android 仿微信聊天界面 以及语音录制功能,Android仿微信录制语音功能相关推荐

  1. android模拟微信聊天功能,android仿微信聊天界面 语音录制功能

    本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图: 第一:chat.xml设计 android:layout_width="fill_parent" and ...

  2. jquery 背景特效实现_html5实现的仿网页版微信聊天界面效果源码

    码农那点事儿 关注我们,一起学习进步 这是一款基于html5实现的仿网页版微信聊天界面效果源码,可实现微信网页版聊天界面效果,在编辑框编辑文字之后按Ctrl+Enter键即可提交文字到聊天对话框上.整 ...

  3. android仿微信聊天功能,Android高仿微信聊天界面代码分享

    微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...

  4. android 微信高仿,Android高仿微信聊天界面代码分享

    微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...

  5. Android仿微信聊天界面

    今天说说android的仿微信聊天界面,我只想说两个字:坑爹 项目已经传到了github: https://github.com/hebiao6446/Hantu-android- 还好我写过iOS仿 ...

  6. Android ListView仿微信聊天界面

    这篇文章主要为大家详细介绍了ListView仿微信聊天界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Android ListView仿聊天界面效果图的具体代码,供 ...

  7. Android仿QQ、微信聊天界面长按提示框效果

    最近在工作项目中要实现一个长按提示 "复制" 的功能,类似于QQ.微信聊天界面长按提示框效果,本来想偷懒在网上找个开源的项目用,但是看了好几个都不是很满意,所以就打算按照自己的思路 ...

  8. 高仿微信聊天界面长按弹框样式

    效果图 背景 在公司做的项目里面,刚好有需要用到微信聊天界面长按弹框样式这种UI的. 网上找了一下,没找到. Android现成的 ListPopupWindow又不能满足需求. 因此在非上班时间撸一 ...

  9. php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...

    Android高仿微信聊天界面代码分享 微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先 ...

最新文章

  1. 2021年大数据Flink(二十一):​​​​​​​案例三 会话窗口
  2. 【Qt】Q_PROPERTY():属性系统
  3. JSR349(Bean Validation 1.1)
  4. 当 Vue 处理数组与处理纯对象的方式一样
  5. 权限设计中的数据灵活存储设计策略参考[以不变应万变]
  6. SharePoint自动化部署,利用PowerShell 导入用户至AD——PART II
  7. 说说windows10自带浏览器Edge的好与不好
  8. shell制表与脚本运行进度条写法
  9. 报表性能优化方案之善用参数注入
  10. 巨头哄抢有声书流量,谁会是耳朵经济最终收割者?
  11. python:talib 计算 SAR
  12. 如何编制试算平衡表_会计实务:试算平衡表的编制步骤
  13. android模拟器命令大全,雷电安卓模拟器命令行整理贴
  14. 2.1 內积与欧几里得空间
  15. 【ArangoDB 介绍】
  16. 物联网常用协议:MQTT、CoAP、LwM2M、HTTP、LoRaWAN和NB-IoT
  17. 扫码比价APP隐私政策
  18. Ext3.x版本锁定列和多表头的插件,BUG修复版
  19. 浏览器控制台接口学习
  20. 正益工场推出移动政务新媒体平台

热门文章

  1. 嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区
  2. 微信网页小游戏网站源码带后台+可后台添加游戏+推荐到微信
  3. Appium架构介绍与环境安装
  4. ACM Uva1594 Ducci序列
  5. 《坂上之云》电影手记
  6. git cherry-pick 的时候出现git cherry-pick xxx  fatal: bad object xxx
  7. openJudge 特殊密码锁 ACM
  8. centos8安装docker运行java文件
  9. 综合练习2:购买电影票(代码区别:对象.成员方法)
  10. SWUSTOJ82编写一个函数,求从n 个不同的数中取r 个数的所有选择的个数。