我有一个在Android上传视频的功能。为此,我已经在服务中使用了整个代码,并使用AsyncTask在doInBackground()中调用上传视频功能。以下是上传视频的代码:
private String uploadFile(String filePath, String proid, String procat) {
String responseString = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(Const_Url.FILE_UPLOAD_URL);
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new ProgressListener() {
@Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
File sourceFile = new File(filePath);
// Adding file data to http body
entity.addPart("image", new FileBody(sourceFile));
entity.addPart("project_id", new StringBody(proid));
entity.addPart("user_id", new StringBody(userid));
entity.addPart("video_type", new StringBody("in_store"));
Log.d("background file path ", filePath);
Log.d("background project id", proid);
Log.d("background project cat", procat);
Log.d("background user id", userid);
totalSize = entity.getContentLength();
httppost.setEntity(entity);
// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// Server response
responseString = EntityUtils.toString(r_entity);
} else {
responseString = "Error occurred! Http Status Code: "
+ statusCode;
}
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
因此 AndroidMultiPartEntity 会上传整个视频。
但问题是,如果在我尝试对服务器进行HTTP调用之间,那么它只是等到视频上传完成()。
理想情况下,它不应该等到很短的时间,但请尽快回复我。我认为视频上传服务会占用整个带宽,因此无法进行其他HTTP调用。
请提出一些解决方案。 TIA。
P.S。我试过了
Thread.currentThread()setPriority(从Thread.MIN_PRIORITY);
降低AsyncTask的优先级并提高其他http调用的优先级(Asynctask)。但徒劳无功。
答案 0 :(得分:1)
对于遇到此问题的每个人,我都有一个解决方案。如果你想在服务的帮助下在后台上传一个非常重的文件(~500mb),请使用这个库: android upload service
我发现这非常容易集成,它还提供了许多其他功能,例如在通知栏中显示 progressbar