下面是小编为大家收集的微信语音怎么保存?微信语音聊天记录导出文件夹教程,本文共7篇,仅供参考,欢迎大家阅读,一起分享。本文原稿由网友“你好吵啊”提供。
篇1:微信语音怎么保存?微信语音聊天记录导出文件夹教程
微信语音怎么保存?
其实,微信语音是自动保存,这个不需要手动保存。
微信语音怎么导出文件夹?
微信语音是以amr格式保存的
大致语音保存位置是:微信安装位置/tencent/micormsg/ 这两个文件夹是你登入过几个微信账所显示的,语音都藏在这里面了 在*voice*的几个文件夹里面就可以找到了 不过这样保存不好分辨哪个语音是谁的,这个比较悲催,只能一个一个点出来听一下咯,篇2:微信聊天记录导出微信聊天记录怎么看
微信的聊天记录很多是很有意义的,需要导出和保持,今天折腾了很久,终于把文字和图片的导出方法给搞定了,至于语音,目前还没有找到很好的方法,以后找到了再分享,今天分享给大家文字与图片的导出简易方法。利用QQ邮箱的记事本来轻松导出。
先安装QQ邮箱,如果你的手机上没有安装,请先安装,随便找个应用商店搜索下载安装即可。
打开微信,找到你需要保持的聊天记录,手指按在某一天记录上不动一两秒
按住一会就会弹出菜单,选择更多。
在新的页面中,选择你需要保存的记录,麻烦点,需要一个一个的勾选,慢慢来,也不急。
勾选完成之后,点击下方中间的图标,如图所示。
在弹出页面中,选择保存到记事本,如图,
登陆QQ邮箱,输入QQ号码与密码,登陆。
登陆后就会看到刚才选中的聊天记录就出现在记事本上了。然后点击保存,这样就保存到QQ邮箱的记事本了。
接下来怎么查看的问题,手机上查看,在手机QQ邮箱上点击记事本,如图
在记事本里的记录就会看到刚刚保存的聊天记录了。
也可以在电脑上查看,如图,点击QQ邮箱的图标,打开QQ邮箱。
在QQ邮箱右边的导航里找到记事本,如图,就会发现最近的记事有刚刚保存的记录。
点击查看,如图。
篇3:微信语音导出手机后无法播放怎么办?
微信语音导出到电脑上后,我们会发现使用任何播放器都不能播放,这是什么原因呢?该用什么播放器打开才可以播放呢?其实微信语音是一种特殊的语音格式,是需要使用专门的解码软件才可以进行播放的,下面我将教大家如何使用微信语音播放器来播放这些微信语音文件。
1、在百度上搜索并下载安装“楼月微信语音播放器”并将其打开。
2、将手机上的微信语音文件复制到电脑上,然后将微信语音文件拖放到软件界面上即可进行播放。下图为播放安卓微信语音文件时的操作界面,安卓手机微信语音文件为后缀为.amr的文件。注意:文件需要先复制到电脑上才可以,直接在手机盘符下是无法播放的。
3、苹果手机微信语音文件的播放方法也是一样,只需要将苹果手机微信语音文件拖放到软件界面上即可播放。苹果手机微信语音文件的后缀为.aud。 注意事项:如果您使用该软件还是不能播放导出的微信语音文件的话,说明该文件已经被损坏。篇4:微信聊天记录怎么备份
1第一步需要下载特别版的电脑管家微信版。下载完成后点击新版本的电脑管家最下面工具栏里面找到微信聊天备份按钮。
2点击完聊天备份会弹出一窗口要求连接手机,这时候你就可以将你的手机连接确保上电脑(此时你安装的微信必须是微信5.2.1以上的版本),电脑管家会连接你的手机。但是同时你也必须在手机上进行授权确认。
3授权完成之后,就可以在电脑上操作了,电脑上直接点击开始备份,无需选择存放文件夹。接下来就将自动进行备份操作。
4在备份完成之后,电脑端会出现,备份成功,如再继续备份则会覆盖备份原来内容,同时也可在换了手机之后进行账号聊天信息的回复操作。犹如网络通讯录一般。很方便
5如何参与微信最新版内测可看我原来一篇文章
篇5:微信聊天记录怎么查
查看微信聊天记录的方法一
由于别人的微信聊天记录存在于别人的手机中,所以我们必须得拿到对方的手机来进行操作。最简单的查看对方微信聊天记录的方法是:在打开微信登陆界面后,点击“登陆遇到问题”按钮,从弹出的扩展菜单中选择“用验证码登陆”项。
然后输入别人的手机号,点击“下一步”按钮。
然后输入验证码,以完成微信的登陆操作。
最后会要求进行好友的验证操作,此时我们可以通过平时与对方的了解来猜测答案。
验证成功后就可以查看对方微信聊天记录啦。
有关查看微信已删除聊天记录的更多方法,大家可以查看小编其它相关经验内容。在此小编强烈推荐大家通过以下教程来操作,实现恢复手机微信已删除聊天记录的操作。
篇6:微信聊天记录怎么查
查看微信聊天记录的方法二
最新版本的微信文本聊天记录位于手机内存中而不是手机SD卡中。因此我们需要首先获取手机的Root权限。我们可以使用“刷机精灵”来获取手机的Root权限。将手机通过USB数据线与电脑相连,然后在刷机精灵主界面中,点击“一键Root”按钮来执行Root权限获取操作。
2待手机Root权限获取完成后,从网上下载“RE管理器”APK程序安装到手机中。
接下来运行手机中的“RE管理器”,依次进入“date”->“date”->“com.tencent.mm”->“MicroMsg”文件夹中,并点击一连串的数字字母文件夹名进入。
接下来点击“MicroMsg.db”文件或其它类似的数据库文件(比如本例中的“IndexMicroMsg.db”文件),从弹出的扩展菜单中选择“复制”项。
然后将其拷贝到SD卡中,或者直接将此“MicroMsg.db”文件拷贝到D盘任意目录中以方便查看。
篇7:Android模仿微信语音聊天功能
AudioManager.java
package com.xuliugen.weichat;import java.io.File;import java.io.IOException;import java.util.UUID;import android.media.MediaRecorder;public class AudioManager { private MediaRecorder mMediaRecorder; private String mDir; private String mCurrentFilePath; private static AudioManager mInstance; private boolean isPrepare; private AudioManager(String dir) { mDir = dir; } public static AudioManager getInstance(String dir) { if (mInstance == null) {synchronized (AudioManager.class) { if (mInstance == null) { mInstance = new AudioManager(dir); }} } return mInstance; } /** * 使用接口 用于回调 */ public interface AudioStateListener { void wellPrepared(); } public AudioStateListener mAudioStateListener; /** * 回调方法 */ public void setOnAudioStateListener(AudioStateListener listener) { mAudioStateListener = listener; } // 去准备 public void prepareAudio() { try {isPrepare = false;File dir = new File(mDir);if (!dir.exists()) { dir.mkdirs();}String fileName = generateFileName();File file = new File(dir, fileName);mCurrentFilePath =file.getAbsolutePath();mMediaRecorder = new MediaRecorder();// 设置输出文件mMediaRecorder.setOutputFile(dir.getAbsolutePath());// 设置MediaRecorder的音频源为麦克风mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置音频格式mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);// 设置音频编码mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 准备录音mMediaRecorder.prepare();// 开始mMediaRecorder.start();// 准备结束isPrepare = true;if (mAudioStateListener != null) { mAudioStateListener.wellPrepared();} } catch (IllegalStateException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } } /** * 随机生成文件的名称 */ private String generateFileName() { return UUID.randomUUID().toString() + .amr; } public int getVoiceLevel(int maxlevel) { if (isPrepare) {try { // mMediaRecorder.getMaxAmplitude() 1~32767 return maxlevel * mMediaRecorder.getMaxAmplitude() / 32768 + 1;} catch (Exception e) {} } return 1; } /** * 释放资源 */ public void release() { //mMediaRecorder.stop(); mMediaRecorder.reset(); mMediaRecorder = null; } /** * 取消录音 */ public void cancel() { release(); if (mCurrentFilePath != null) {File file = new File(mCurrentFilePath);file.delete();mCurrentFilePath = null; } } public String getCurrentFilePath() { return mCurrentFilePath; }}
AudioRecorderButton.java
package com.xuliugen.weichat;import android.content.Context;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import com.xuliugen.weichat.R;import com.xuliugen.weichat.AudioManager.AudioStateListener;public class AudioRecorderButton extends Button { private static final int STATE_NORMAL = 1;// 默认的状态 private static final int STATE_RECORDING = 2;// 正在录音 private static final int STATE_WANT_TO_CANCEL = 3;// 希望取消 private int mCurrentState = STATE_NORMAL; // 当前的状态 private boolean isRecording = false;// 已经开始录音 private static final int DISTANCE_Y_CANCEL = 50; private DialogManager mDialogManager; private AudioManager mAudioManager; private float mTime; // 是否触发longClick private boolean mReady; private static final int MSG_AUDIO_PREPARED = 0x110; private static final int MSG_VOICE_CHANGED = 0x111; private static final int MSG_DIALOG_DIMISS = 0x112; /* * 获取音量大小的线程 */ private Runnable mGetVoiceLevelRunnable = new Runnable() { public void run() {while (isRecording) { try { Thread.sleep(100); mTime += 0.1f; mHandler.sendEmptyMessage(MSG_VOICE_CHANGED); } catch (InterruptedException e) { e.printStackTrace(); }} } }; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) {switch (msg.what) {case MSG_AUDIO_PREPARED: // 显示υ框在开始录音以后 mDialogManager.showRecordingDialog(); isRecording = true; // 开启一个线程 new Thread(mGetVoiceLevelRunnable).start(); break;case MSG_VOICE_CHANGED: mDialogManager.updateVoiceLevel(mAudioManager.getVoiceLevel(7)); break;case MSG_DIALOG_DIMISS: mDialogManager.dimissDialog(); break;}super.handleMessage(msg); } }; /** * 以下2个方法是构造方法 */ public AudioRecorderButton(Context context, AttributeSet attrs) { super(context, attrs); mDialogManager = new DialogManager(context); String dir = /storage/sdcard0/my_weixin; //String dir = Environment.getExternalStorageDirectory()+/my_weixin; mAudioManager = AudioManager.getInstance(dir); mAudioManager.setOnAudioStateListener(new AudioStateListener() {public void wellPrepared() { mHandler.sendEmptyMessage(MSG_AUDIO_PREPARED);} }); // 由于这个类是button所以在构造方法中添加监听事件 setOnLongClickListener(new OnLongClickListener() {public boolean onLongClick(View v) { mReady = true; mAudioManager.prepareAudio(); return false;} }); } public AudioRecorderButton(Context context) { this(context, null); } /** * 录音完成后的回调 */ public interface AudioFinishRecorderListener { void onFinish(float seconds, String filePath); } private AudioFinishRecorderListener audioFinishRecorderListener; public void setAudioFinishRecorderListener(AudioFinishRecorderListener listener) { audioFinishRecorderListener = listener; } /** * 屏幕的触摸事件 */ @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); int x = (int) event.getX();// 获得x轴坐标 int y = (int) event.getY();// 获得y轴坐标 switch (action) { case MotionEvent.ACTION_DOWN:changeState(STATE_RECORDING);break; case MotionEvent.ACTION_MOVE:if (isRecording) { // 如果想要取消,根据x,y的坐标看是否需要取消 if (wantToCancle(x, y)) { changeState(STATE_WANT_TO_CANCEL); } else { changeState(STATE_RECORDING); }}break; case MotionEvent.ACTION_UP:if (!mReady) { reset(); return super.onTouchEvent(event);}if (!isRecording || mTime < 0.6f) { mDialogManager.tooShort(); mAudioManager.cancel(); mHandler.sendEmptyMessageDelayed(MSG_DIALOG_DIMISS, 1000);// 延迟显示对话框} else if (mCurrentState == STATE_RECORDING) { // 正在录音的时候,结束 mDialogManager.dimissDialog(); mAudioManager.release(); if (audioFinishRecorderListener != null) { audioFinishRecorderListener.onFinish(mTime,mAudioManager.getCurrentFilePath()); }} else if (mCurrentState == STATE_WANT_TO_CANCEL) { // 想要取消 mDialogManager.dimissDialog(); mAudioManager.cancel();}reset();break; } return super.onTouchEvent(event); } /** * 恢复状态及标志位 */ private void reset() { isRecording = false; mTime = 0; mReady = false; changeState(STATE_NORMAL); } private boolean wantToCancle(int x, int y) { if (x < 0 || x >getWidth()) { // 超过按钮的宽度return true; } // 超过按钮的高度 if (y < -DISTANCE_Y_CANCEL || y >getHeight() + DISTANCE_Y_CANCEL) {return true; } return false; } /** * 改变 */ private void changeState(int state) { if (mCurrentState != state) {mCurrentState = state;switch (state) {case STATE_NORMAL: setBackgroundResource(R.drawable.btn_recorder_normal); setText(R.string.str_recorder_normal); break;case STATE_RECORDING: setBackgroundResource(R.drawable.btn_recorder_recording); setText(R.string.str_recorder_recording); if (isRecording) { mDialogManager.recording(); } break;case STATE_WANT_TO_CANCEL: setBackgroundResource(R.drawable.btn_recorder_recording); setText(R.string.str_recorder_want_cancel); mDialogManager.wantToCancel(); break;} } }}
DialogManager.java
package com.xuliugen.weichat;import android.app.AlertDialog;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import com.xuliugen.weichat.R;/** * 用于管理Dialog * * @author xuliugen * */public class DialogManager { private AlertDialog.Builder builder; private ImageView mIcon; private ImageView mVoice; private TextView mLable; private Context mContext; private AlertDialog dialog;//用于取消AlertDialog.Builder /** * 构造方法 传入上下文 */ public DialogManager(Context context) { this.mContext = context; } // 显示录音的对话框 public void showRecordingDialog() { builder = new AlertDialog.Builder(mContext, R.style.AudioDialog); LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.dialog_recorder,null); mIcon = (ImageView) view.findViewById(R.id.id_recorder_dialog_icon); mVoice = (ImageView) view.findViewById(R.id.id_recorder_dialog_voice); mLable = (TextView) view.findViewById(R.id.id_recorder_dialog_label); builder.setView(view); builder.create(); dialog = builder.show(); } public void recording(){ if(dialog != null && dialog.isShowing()){ //显示状态mIcon.setVisibility(View.VISIBLE);mVoice.setVisibility(View.VISIBLE);mLable.setVisibility(View.VISIBLE);mIcon.setImageResource(R.drawable.recorder);mLable.setText(手指上滑,取消发送); } } // 显示想取消的对话框 public void wantToCancel() { if(dialog != null && dialog.isShowing()){ //显示状态mIcon.setVisibility(View.VISIBLE);mVoice.setVisibility(View.GONE);mLable.setVisibility(View.VISIBLE);mIcon.setImageResource(R.drawable.cancel);mLable.setText(松开手指,取消发送); } } // 显示时间过短的对话框 public void tooShort() { if(dialog != null && dialog.isShowing()){ //显示状态mIcon.setVisibility(View.VISIBLE);mVoice.setVisibility(View.GONE);mLable.setVisibility(View.VISIBLE);mIcon.setImageResource(R.drawable.voice_to_short);mLable.setText(录音时间过短); } } // 显示取消的对话框 public void dimissDialog() { if(dialog != null && dialog.isShowing()){ //显示状态dialog.dismiss();dialog = null; } } // 显示更新音量级别的对话框 public void updateVoiceLevel(int level) { if(dialog != null && dialog.isShowing()){ //显示状态// mIcon.setVisibility(View.VISIBLE);// mVoice.setVisibility(View.VISIBLE);// mLable.setVisibility(View.VISIBLE);//设置图片的idint resId = mContext.getResources().getIdentifier(v+level, drawable, mContext.getPackageName());mVoice.setImageResource(resId); } }}
MainActivity.java
package com.xuliugen.weichat;import java.util.ArrayList;import java.util.List;import com.xuliugen.weichat.AudioRecorderButton.AudioFinishRecorderListener;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.media.MediaPlayer;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends Activity { private ListView mListView; private ArrayAdapter
MediaManager.java
package com.xuliugen.weichat;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.media.MediaPlayer.OnErrorListener;public class MediaManager { private static MediaPlayer mMediaPlayer; private static boolean isPause; /** * 播放音乐 * @param filePath * @param onCompletionListener */ public static void playSound(String filePath,OnCompletionListener onCompletionListener) { if (mMediaPlayer == null) {mMediaPlayer = new MediaPlayer();//设置一个error mMediaPlayer.setOnErrorListener(new OnErrorListener() { public boolean onError(MediaPlayer arg0, int arg1, int arg2) { mMediaPlayer.reset(); return false; }}); } else {mMediaPlayer.reset(); } try {mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mMediaPlayer.setOnCompletionListener(onCompletionListener);mMediaPlayer.setDataSource(filePath);mMediaPlayer.prepare();mMediaPlayer.start(); } catch (Exception e) { } } /** * 暂停播放 */ public static void pause() { if (mMediaPlayer != null && mMediaPlayer.isPlaying()) { //正在播放的时候mMediaPlayer.pause();isPause = true; } } /** * 当前是isPause状态 */ public static void resume() { if (mMediaPlayer != null && isPause) { mMediaPlayer.start();isPause = false; } } /** * 释放资源 */ public static void release() { if (mMediaPlayer != null) {mMediaPlayer.release();mMediaPlayer = null; } }}
RecoderAdapter.java
package com.xuliugen.weichat;import java.util.List;import android.content.Context;import android.util.DisplayMetrics;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.ArrayAdapter;import android.widget.TextView;import com.xuliugen.weichat.MainActivity.Recorder;public class RecoderAdapter extends ArrayAdapter