package com.project.test;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import com.ideepwise.zhztbusiness.Tools.Tools;
import com.ideepwise.zhztbusiness.Tools.req_multi_form;
import com.unity3d.player.UnityPlayerActivity;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
public class MainActivity extends UnityPlayerActivity {
public static final int GET_OK = 1,GET_ERROR = 2;
private MyReceiver receiver=null;
private boolean isRecording=false;
private String postURL=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//注册广播接收器
receiver=new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("com.ideepwise.zhztbusiness.RecordingService");
MainActivity.this.registerReceiver(receiver,filter);
}
@Override
protected void onDestroy(){
super.onDestroy();
}
public void CheckLoaclRecord()
{
File file=new File(Tools.getAudioFilePath());
if(file.isDirectory())
{
File[] files= file.listFiles();
if(files.length>0)
{
try {
for (int i = 0; i < files.length; i++) {
files[i].delete();
}
}catch (Exception e)
{
}
}
}
}
public void StartRecord(String saleID,String postURL)
{
if(isRecording)
return;
isRecording=true;
this.postURL=postURL;
String startTime=Tools.DateFormat("yyyy-MM-dd HH:mm:ss");
//启动Service并传入参数
Intent intent = new Intent(MainActivity.this, RecordingService.class);
intent.putExtra("saleID",saleID);
intent.putExtra("startTime",startTime);
startService(intent);
}
public void StopRecord()
{
Intent intent = new Intent(MainActivity.this, RecordingService.class);
stopService(intent);
}
/**
* 广播接受录音文件存储完后才能上传
*/
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
isRecording=false;
String recordPath=intent.getExtras().getString("filePath");
UpdateRecord(recordPath);
}
}
// 使用handler处理接收到的消息
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what ==GET_OK)
{
ShowToast("文件保存成功");
deleteRecord(msg.obj.toString());
}
}
};
// 显示Toast消息
public void ShowToast(final String message){
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
});
}
public void UpdateRecord(String data)
{
try{
String fileName= data.substring(data.lastIndexOf("/")+1);
String[] record= fileName.split("_");
Map<String, String> map = new HashMap();
map.put("salerId", record[0]);
map.put("startTime", record[1]);
map.put("endTime", record[2]);
Map<String, File> mapFile = new HashMap();
mapFile.put("file", new File(data));
req_multi_form form=new req_multi_form();
form.setFileField(mapFile);
form.setNormalField(map);
form.setAction(postURL);
UploadFile(form,data);
}catch (Exception e)
{
ShowToast("上传出问题啦");
}
}
/**
* android上传文件到服务器
*
* @param form 需要上传的文件
* @return 返回响应的内容
*/
public void UploadFile(final req_multi_form form,final String data)
{
new Thread(){
@Override
public void run() {
super.run();
String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
String PREFIX = "--", LINE_END = "\r\n";
String CONTENT_TYPE = "multipart/form-data"; // 内容类型
Map<String, File> files = form.getFileField();
String RequestURL = form.getAction();
Map<String, String> param = form.getNormalField();
try {
URL url = new URL(RequestURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(10000);
conn.setDoInput(true); // 允许输入流
conn.setDoOutput(true); // 允许输出流
conn.setUseCaches(false); // 不允许使用缓存
conn.setRequestMethod("POST"); // 请求方式
conn.setRequestProperty("Charset", "utf-8"); // 设置编码
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);
if (files != null) {
/**
* 当文件不为空,把文件包装并且上传
*/
DataOutputStream dos = new DataOutputStream(
conn.getOutputStream());
StringBuffer sb = new StringBuffer();
String params = "";
if (param != null && param.size() > 0) {
Iterator<String> it = param.keySet().iterator();
while (it.hasNext()) {
sb = null;
sb = new StringBuffer();
String key = it.next();
String value = param.get(key);
sb.append(PREFIX).append(BOUNDARY).append(LINE_END);
sb.append("Content-Disposition: form-data; name=\"")
.append(key).append("\"").append(LINE_END)
.append(LINE_END);
sb.append(value).append(LINE_END);
params = sb.toString();
dos.write(params.getBytes());
// dos.flush();
}
}
/**
* 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
* filename是文件的名字,包含后缀名的 比如:abc.png
*/
if( files != null && files.size() > 0)
{
Iterator<String> it = files.keySet().iterator();
while (it.hasNext())