android上傳錄音文件
A. Android實現錄音功能
1 Android錄音需要聲明錄音許可權
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2.錄音文件要寫到文件夾中,創建文件夾,在Application的onCreate方法中創建文件夾
@Override
public void onCreate() {
super.onCreate();
CrashHandler mCrashHandler = CrashHandler.getInstance();
mCrashHandler.init(getApplicationContext(), getClass());
initFile();
}
private void initFile() {
//錄音文件
File audioFile = new File(Constant.UrlAudio);
if (!audioFile.exists()) {
audioFile.mkdirs();
} else if (!audioFile.isDirectory()) {
audioFile.delete();
audioFile.mkdirs();
}
//拍攝圖片文件
File imageFile = new File(Constant.UrlImage);
if (!imageFile.exists()) {
imageFile.mkdirs();
} else if (!imageFile.isDirectory()) {
imageFile.delete();
imageFile.mkdirs();
}
}
Constant.UrlImage是個靜態的文件路徑
//錄音文件
public static String UrlAudio = FileUtil.getSdcardPathOnSys()+"/EhmFile/media/audio/";
3.在activity中開始錄音
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.media.MediaRecorder;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;
public class Record2Activity extends AppCompatActivity {
// 錄音界面相關
Button btnStart;
Button btnStop;
TextView textTime;
// 錄音功能相關
MediaRecorder mMediaRecorder; // MediaRecorder 實例
boolean isRecording; // 錄音狀態
String fileName; // 錄音文件的名稱
String filePath; // 錄音文件存儲路徑
Thread timeThread; // 記錄錄音時長的線程
int timeCount; // 錄音時長 計數
final int TIME_COUNT = 0x101;
// 錄音文件存放目錄
final String audioSaveDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/audiodemo/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_record2);
btnStart = (Button) findViewById(R.id.btn_start);
btnStop = (Button) findViewById(R.id.btn_stop);
textTime = (TextView) findViewById(R.id.text_time);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 開始錄音
btnStart.setEnabled(false);
btnStop.setEnabled(true);
startRecord();
isRecording = true;
// 初始化錄音時長記錄
timeThread = new Thread(new Runnable() {
@Override
public void run() {
countTime();
}
});
timeThread.start();
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 停止錄音
btnStart.setEnabled(true);
btnStop.setEnabled(false);
stopRecord();
isRecording = false;
}
});
}
// 記錄錄音時長
private void countTime() {
while (isRecording) {
Log.d("mediaRe","正在錄音");
timeCount++;
Message msg = Message.obtain();
msg.what = TIME_COUNT;
msg.obj = timeCount;
myHandler.sendMessage(msg);
try {
timeThread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Log.d("mediaRec", "結束錄音");
timeCount = 0;
Message msg = Message.obtain();
msg.what = TIME_COUNT;
msg.obj = timeCount;
myHandler.sendMessage(msg);
}
/**
* 開始錄音 使用amr格式
* 錄音文件
*
* @return
*/
public void startRecord() {
// 開始錄音
/* ①Initial:實例化MediaRecorder對象 */
if (mMediaRecorder == null)
mMediaRecorder = new MediaRecorder();
try {
/* ②setAudioSource/setVedioSource */
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設置麥克風
/*
* ②設置輸出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式
* ,H263視頻/ARM音頻編碼)、MPEG-4、RAW_AMR(只支持音頻且音頻編碼要求為AMR_NB)
*/
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
/* ②設置音頻文件的編碼:AAC/AMR_NB/AMR_MB/Default 聲音的(波形)的采樣 */
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
fileName = DateFormat.format("yyyyMMdd_HHmmss", Calendar.getInstance(Locale.CHINA)) + ".m4a";
//注意文件夾要創建之後才能使用
filePath = Constant.UrlAudio + fileName;
/* ③准備 */
mMediaRecorder.setOutputFile(filePath);
mMediaRecorder.prepare();
/* ④開始 */
mMediaRecorder.start();
} catch (IllegalStateException e) {
Log.i("mediaEr", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
} catch (IOException e) {
e.printStackTrace();
Log.i("mediaEr", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
}
}
/**
* 停止錄音
*/
public void stopRecord() {
//有一些網友反應在5.0以上在調用stop的時候會報錯,翻閱了一下谷歌文檔發現上面確實寫的有可能會報錯的情況,捕獲異常清理一下就行了,感謝大家反饋!
try {
mMediaRecorder.stop();
mMediaRecorder.release();
mMediaRecorder = null;
filePath = "";
} catch (RuntimeException e) {
Log.e("mediaR", e.toString());
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
File file = new File(filePath);
if (file.exists())
file.delete();
filePath = "";
}
}
// 格式化 錄音時長為 秒
public static String FormatMiss(int miss) {
return "" + miss;
}
Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case TIME_COUNT:
int count = (int) msg.obj;
Log.d("meidaRe","count == " + count);
textTime.setText(FormatMiss(count));
break;
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
myHandler.removeCallbacksAndMessages(null);
}
}
布局文件很簡單
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Record2Activity">
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="結束"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/btn_start"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="開始"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btn_stop"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="11dp"
android:layout_marginTop="47dp"
android:text="時間"
app:layout_constraintStart_toStartOf="@+id/btn_start"
app:layout_constraintTop_toBottomOf="@+id/btn_start" />
</androidx.constraintlayout.widget.ConstraintLayout>
這樣就可以使用錄音功能了
B. 手機里的錄音怎麼傳到電腦上
以華為手機P40,EMUI10系統為例,手機錄音傳到電腦上的方式:1、如果使用的是帶有藍牙功能的電腦,可以將手機藍牙打開,與電腦連接後,在手機文件管理器中找到錄音文件,然後用藍牙發送到電腦設備上,電腦端接收到文件後保存即可。
2、可以通過電子郵件來實現,在錄音機中選中需要上傳的錄音文件,長按後會出現一些選項,點擊「分享」,選擇電子郵件,然後將錄音文件作為附件發送給自己,在電腦上登錄郵箱,下載附件後保存。
3、還可以在手機上登錄QQ,點擊「設備」選項,選擇「我的電腦」,在聊天窗口下方點擊文件夾圖標,然後選中需要上傳的錄音文件,發送成功後,在電腦版QQ上接收文件並保存。
4、也可以在微信的通訊錄中找到「文件傳輸助手」,進入聊天窗口後點擊右側的+號,選擇「文件」,選中錄音文件後點擊發送,同樣是在電腦版微信上接收文件並保存。
該答案適用於iPhone、華為、小米、OPPO等大部分品牌的手機型號。
C. 如何設置手機自動通話錄音並上傳錄音的文件夾
android版本從1.6開始就收緊了軟體內錄許可權,如果你的手機沒有內置錄音功能,那麼想找個能錄音的軟體都要碰運氣,更不要說你連自己的手機系統版本號都不肯講出來的情況下了。
這兩個軟體功能合並起來會被定義為非法軟體,所以萬一你找到了內錄軟體,那麼上傳的事可以交給一些網盤客戶端,他們都具備自動上傳功能。
D. android上傳錄音到伺服器代碼思路
你先得確定伺服器用什麼協議啊,HTTP,webservice,socket等等,如果用http一般兩種方式,一個是java自帶的urlhttpconnection,還有就是阿帕奇的httpclient。
代碼片段
// 使用POST方法提交數據,必須大寫
conn.setRequestMethod("POST");
// 需要輸出流
conn.setDoOutput(true);
// 需要輸入流
conn.setDoInput(true);
// 連接超時,10秒
conn.setConnectTimeout(10 * 1000);
// 讀取超時,10秒
conn.setReadTimeout(10 * 1000);
// 打開輸出流,寫入數據
out = conn.getOutputStream();
out.write(data);
out.flush();
// 以上
conn.connect();
if (conn.getResponseCode() == 200) {
in = conn.getInputStream();
// TODO 讀取數據
// 參考
int contentLength = conn.getContentLength();
ByteArrayOutputStream buf = new ByteArrayOutputStream(
contentLength > 0 ? contentLength : 1024);
byte[] buffer = new byte[1024];
while ((contentLength = in.read(buffer)) != -1) {
buf.write(buffer, 0, contentLength);
}
// 可選
buf.flush();
return buf.toByteArray();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (conn != null) {
conn.disconnect();
}
// 錯誤的寫法
// try {
// in.close();
// out.close();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
//盡量不要返回null 避免空指針異常
return new byte[0];
}
伺服器在getpost裡面接收可以轉為btye數組,然後在轉為文件
E. 如何把蘋果手機的錄音文件發送到電腦或安卓手機上
手機連接電腦--打開itunes-設置-同步語音備忘錄--然後選擇音樂,即可導出;
這種方法導出錄音都比較繁瑣,如果你經常使用,建議你下載專業的錄音軟體,例如「移動公證」,提供手機端的:電話錄音、現場錄音、現場錄像、拍照取證、存證和公證管理服務,存儲雲端,支持微信、QQ直接分享,也可以下載到電腦,希望對你有幫助。
F. OPPO29安卓手機要怎麼把錄音上傳到群文件中的某個文件夾里
一般來說你打開那個文件夾,然後一般都會有上傳的選項,你點擊一下就好了。
G. 安卓手機放車上錄音怎麼弄的
車上錄音可以傳到手機上嗎:可以的阿 要看是什麼系統的,安卓的連接電腦開啟儲存模式,像優盤一樣從我的電腦里找到錄音文件拷貝出來就行,蘋果手機直接可以從錄音文件中分享行車記錄儀上面的圖像和聲音數據可以通過多種途徑導出和上傳到手機上。第一是行車記錄儀里的SD卡,通過讀卡器導出到手機。第二可以用手機遠程操控行車記錄儀,把行車記錄儀上面的圖像聲音數據進行上傳到手機里。
H. 一個qq好友發給我的錄音文檔,我想發送到紙飛機軟體上,怎麼發送安卓手機
先把文檔保存到手機本地,在用紙飛機發送出去就行
I. 安卓手機的錄音如何發到蘋果手機上
先發到電腦端,用格式工廠轉換成mp3格式。
將手機與電腦用usb連接,電腦上的itunes自動打開,如果你電腦里沒有安裝itunes軟體的話,請下載。
勾選音樂選項下的同步音樂,想把整個音樂庫中的歌曲都導入手機的話就選擇「整個音樂資料庫」,點擊下面的應用即把錄音發到蘋果手機上了。
J. android怎樣上傳本地音頻文件
開啟網路,打開應用,尋找上傳功能,選擇上傳內容