2013-01-17 16 views
2

從Froyo的冰淇淋三明治,這是方式:是否有任何方法可以爲所有級別的apis安全地使用相機?

Intent intent = new 
Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
File file = new File(Environment.getExternalStorageDirectory(), "test.jpg"); 
tempUriCameraDeviceNotSuported = Uri.fromFile(file); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, 
tempUriCameraDeviceNotSuported); 
startActivityForResult(intent, 0); 

但是對於果凍豆它不工作,你必須做這樣的事情:

Intent takePicture = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(takePicture, 0); 

我不知道,如果這個錯誤只發生在果凍豆上,或者也取決於硬件模型。谷歌沒有對這個問題說一句話(爲什麼?爲什麼?)。有人知道我在哪裏可以找到所有設備和他們正確的相機實施列表?有人知道這樣做的最佳方式?

回答

1

您可以隨時檢查操作系統版本:

if (android.os.Build.VERSION.SDK_INT >= 17) { 
     Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(takePicture, 0); 
    } else { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     File file = new File(Environment.getExternalStorageDirectory(), 
       "test.jpg"); 
     tempUriCameraDeviceNotSuported = Uri.fromFile(file); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, 
       tempUriCameraDeviceNotSuported); 
     startActivityForResult(intent, 0); 
    } 
+0

謝謝,但它真的是最好的解決方案嗎?所有具有果凍的設備都支持相同的實現嗎?這不是硬件問題嗎? –

+0

我不確定它的硬件問題。你也可以嘗試一下。並嘗試兩個實現,所以沒有什麼可以出錯。 – wtsang02

+0

但你怎麼能這樣做?我的意思是當意圖完成時 - 當代碼在onActivityReult上時,你什麼都不能做。回到以前的意圖是不可能的,然後嘗試另一種方式,不是嗎? –

1

從Frojo到ICRE霜這是方法

請理解你與你的代碼做的是問一個隨機應用程序爲你拍照。這種隨機的應用程序可能是:

  • 的AOSP攝像頭應用程序,或
  • 設備製造商的更換相機的應用程序,或
  • 用戶安裝了攝像頭的應用程序,或
  • 其他任何選舉支持MediaStore.ACTION_IMAGE_CAPTURE恰好位於設備上

但是對於果凍豆這是行不通的

有才華的程序員會解釋「它不工作」的含義。

我不知道這是否錯誤只發生在果凍豆

天才的程序員會解釋什麼是「錯誤」的。

除此之外,Android本身幾乎沒有,如果有的話,與它做。這個錯誤最有可能發生在您使用該「果凍豆」設備的任何相機應用程序中。

谷歌不會說這個問題(爲什麼?,爲什麼?)。

有才華的程序員會解釋什麼「問題」比「不能工作」更詳細。

有人知道我在哪裏可以找到所有設備和他們正確的相機實施列表?

有超過1000個Android設備。我有理由相信,Play商店和其他地方有超過1,000個應用程序是「相機應用程序」,或者以其他方式支持MediaStore.ACTION_IMAGE_CAPTURE。這意味着您的列表中有超過1,000,000個設備和應用程序的組合。歡迎您自己制定這樣的清單。

如果您覺得MediaStore.ACTION_IMAGE_CAPTURE對您的情況不可靠,歡迎您使用android.hardware.Camera自己拍照。

此外,FWIW,this sample app使用與第一個代碼段中相同的代碼,可以在運行Android 4.2.1的Galaxy Nexus和運行Android 4.1.2的Nexus S上正常工作,兩者都是「果凍豆」。

相關問題