2013-12-10 18 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。它是別的 –

相關問題