我正在使用以下代码捕获图像。
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgFile));
startActivityForResult(camera, CAMERA_PIC_REQUEST );
并且在onActivityResult内部,如果resultCode是RESULT_OK,那么iam按顺序启动服务以将捕获的图像上传到Webservice。我能够成功调用Webservice。但问题是应用程序被绞死我的意思是,活动正在被绞死。我无法在活动中执行任何操作。
提前致谢。
答案 0 :(得分:1)
启动Asyntask而不是服务以将图像上传到网络。服务在Ui Thread上运行但asyntask在后台运行,不会挂起应用程序。 它完美地运作。
如果有帮助,请投票或标记为真。
答案 1 :(得分:0)
而不是AsyncTask
,尝试运行。这是我做的一些与你的代码非常相似的代码。在我的情况下,我从条形码扫描仪获得了意图结果,但想法是一样的。
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
String contents = scanResult.getContents();
//String formatName = scanResult.getFormatName();
if (contents == null )
{
Toast.makeText(getApplicationContext(), this.getString(R.string.error_no_barcode_scanned), Toast.LENGTH_LONG).show();
}
else
{
GetProductInfo thread = new GetProductInfo(this, myHandler, contents);
thread.start();
}
}
正如您所看到的,我正在将一个处理程序传递给线程,以便我可以使用任何进度更新UI。如果您查看线程的run()
方法,您可以看到通过处理程序发回的数据,如下所示:
Message msg = new Message();
Bundle b = new Bundle();
b.putParcelable(KEY, info);
b.putString(PRODUCTCODE, productCode);
msg.setData(b);
handler.sendMessage(msg);
这解决了应用程序无响应(ANR)问题和UI更新问题。
我要提到的另一件事。如果您使用外部Intent拍摄相机照片(例如相机应用程序),请确保用于保存图像的文件路径位于两个应用程序均可访问的位置。我自己犯了这个错误。这是我最终提出的解决方案:
@SuppressLint("SimpleDateFormat")
private File getTempFile() {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "imgfile_" + timeStamp + ".jpg";
return new File(Environment.getExternalStorageDirectory(), imageFileName);
}