package com.andbase.demo.global;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.webkit.JavascriptInterface;
import com.andbase.demo.activity.CaptureActivity;
import com.andbase.demo.activity.RecoderCameraActivity;
import com.andbase.library.global.AbConstant;
import com.andbase.library.http.entity.MultipartEntity;
import com.andbase.library.http.model.AbRequestParams;
import org.apache.http.HttpStatus;
import java.io.File;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class AndH5Impl implements AndH5Interface {
private Context context = null;
public AndH5Impl(Context context) {
super();
this.context = context;
}
@Override
@JavascriptInterface
public boolean takePicture(int cameraId,int orientation) {
Intent intent = new Intent(this.context,CaptureActivity.class);
/**前后摄像头 1是前置 0是后置*/
intent.putExtra("cameraId", cameraId);
/**横屏为0 竖屏为1*/
intent.putExtra("orientation", orientation);
((Activity)(this.context)).startActivityForResult(intent, AbConstant.REQUEST_CODE_TAKEPICTURE);
return true;
}
@Override
@JavascriptInterface
public String getPictureFile(String requestUrl,String localPath) {
AbRequestParams params = new AbRequestParams();
params.put("data", "1");
params.put("file", new File(localPath));
String result = request(requestUrl, params);
return result;
}
@Override
@JavascriptInterface
public boolean startVideoRecoder(int cameraId,int orientation) {
Intent intent = new Intent(this.context,RecoderCameraActivity.class);
/**前后摄像头 1是前置 0是后置*/
intent.putExtra("cameraId", cameraId);
/**横屏为0 竖屏为1*/
intent.putExtra("orientation", orientation);
((Activity)(this.context)).startActivityForResult(intent, AbConstant.REQUEST_CODE_RECODER);
return true;
}
@Override
@JavascriptInterface
public String getVideoRecoderFile(String requestUrl, String localPath) {
return getPictureFile(requestUrl,localPath);
}
/**
* 简单的请求,只支持返回的数据是String类型,不支持转发重定向
* @param url
* @param params
* @return
*/
public static String request(final String url, final AbRequestParams params) {
HttpURLConnection urlConn = null;
String resultString = null;
try {
URL requestUrl = new URL(url);
urlConn = (HttpURLConnection) requestUrl.openConnection();
urlConn.setRequestMethod("POST");
urlConn.setConnectTimeout(10000);
urlConn.setReadTimeout(10000);
urlConn.setDoOutput(true);
if(params!=null){
urlConn.setRequestProperty("connection", "keep-alive");
urlConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + params.boundaryString());
MultipartEntity reqEntity = (MultipartEntity)params.getEntity();
reqEntity.writeTo(urlConn.getOutputStream());
}else{
urlConn.connect();
}
if (urlConn.getResponseCode() == HttpStatus.SC_OK){
resultString = readString(urlConn.getInputStream());
}else{
resultString = readString(urlConn.getErrorStream());
}
urlConn.getInputStream().close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (urlConn != null)
urlConn.disconnect();
}
return resultString;
}
private static String readString(InputStream is) {
StringBuffer rst = new StringBuffer();
byte[] buffer = new byte[1024];
int len = 0;
try {
while ((len = is.read(buffer)) > 0){
rst.append(new String(buffer, 0,len,"UTF-8"));
}
} catch (Exception e) {
e.printStackTrace();
}
return rst.toString();
}
}