2013-12-10 17 views
0

我使用下面的代码捕获图像。保存图像后应用程序被吊死

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开始按顺序对所捕获的图像上传到web服务的服务。我能够成功地调用Web服务。但问题是,我的意思是应用程序被吊死,Activity被吊死。我无法在活动中采取任何行动。

在此先感谢。

+0

我认为问题是你的“服务”需要更多关于此服务的代码。 –

+0

如果应用程序被阻止,那通常意味着,您正在忙于工作或等待主线程。网络不能在主线程上执行,所以这不成问题。在您的应用程序中寻找可能会等待服务完成的点数,否则。否则,请提供代码。 – damian

+0

我正在将必要的数据传递给服务。服务能够成功执行任务。但是我所称的服务的活动正在被吊死。 – ravi

回答

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); 
} 
1

启动Asyntask而不是服务将图像上传到网页。服务在Ui线程上运行但asyntask在后台运行,不会挂起应用程序。 它完美的作品。

如果有帮助,请选Voteup或标记为true。

+0

我可以在OnActivityResult里调用这个Asyn Task吗? **新的StartAsyncTask().execute(); ** – ravi

+0

我曾尝试Asyntask(没有显示进度对话框)也面临同样的问题:( – ravi

+0

所以你的问题不是服务或asyntask。它是别的 –

相关问题