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

本文实例为大家分享了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);

}

第二部分 工具类

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仿微信录制语音功能所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值