2012-07-02 86 views
0

Android錯誤:作物意圖在某些文件管理器上工作。Android錯誤:作物意圖在某些設備上工作

以下代碼:

啓動意圖從文件夾/文件裁剪圖像。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

     //intent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString()); 
     intent.putExtra("crop", "true"); 
     intent.putExtra("return-data", true); 

     startActivityForResult(intent, 0); 

2個版本的代碼在不同的設備,相同的Android版本上崩潰的方式不同。

1 verison:

try 
    { 
     bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), targetUri); 

     }catch (FileNotFoundException e){e.printStackTrace();} 
     catch (IOException e){e.printStackTrace();} 

第二個版本(其他設備上的作品)

bitmap = (Bitmap) data.getExtras().get("data"); 

什麼是我該怎麼辦?

+1

看看這個[相關問題]的接受答案(http://stackoverflow.com/questions/10008623/android-mediastore-crop-function-how-to-make-selection-arrows-always-visible )。作物意圖功能顯然不存在於每個設備上,並且可以定製爲具有不同的行爲。在這種情況下,您需要訴諸實施您自己的解決方案。 – tiguchi

+0

這是個壞消息:-( –

+0

你應該永遠不要盲目利用內部API ......在使用它們之前總是檢查它們是否存在,並且知道並非所有設備都支持它 –

回答

3

com.android.camera.action.CROP是內部API的一部分,因此不保證能夠被所有Android設備支持。

如果您希望它被所有設備支持,您將不得不實施您自己的作物活動。如果某些設備不支持Intent,至少應該實施某種回退行爲。 請不要忘記做這個! :)

順便說一下,如果我沒有記錯,三星Galaxy實現了自己的媒體/圖庫應用程序,所以這就是爲什麼它無法識別意圖。

+0

感謝您的支持,有些設備不支持意圖?是不是有點瘋狂? –

+0

這並不是說他們不支持意圖......更像是「重新定義了它」 Android是開源的,這意味着像三星和HTC這樣的公司可以採用源代碼和定製UI,刪除某些應用程序,製作他們自己的應用程序等等。這就是爲什麼Google內部源代碼中沒有東西是您永遠不能依賴的東西...因爲不能保證所有*設備都保持不變,另一方面,公共SDK無論如何都能保證工作,公共SDK是內部API之上的抽象,這意味着您可以始終信任它的工作。 –

+0

這也是爲什麼一些設備需要這麼長時間才能升級到更新版本的Android(即大多數設備尚未升級到ICS),因爲像Verison和三星這樣的公司花費額外的6-12個月時間來修改操作系統以滿足他們的需求。 –

相關問題