2011-02-14 29 views
8

私はネイティブカメラアプリから撮影した画像をアプリとして開発しています。ユーザーに表示されます。 私がしたコードは次のとおりです。Android Samsung:カメラアプリがintent.getData()を返さない

/* Intent */ 
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
startActivityForResult(intent, TAKE_PICTURE); 

/* Result */ 
onActivityResult(int requestCode, int resultCode, 
     Intent returnIntent) { 
    if(requestCode == TAKE_PICTURE) { 
     //picture from Camera 
     if (resultCode == Activity.RESULT_OK) { 
      if(returnIntent != null) { 
       try { 
        // Get the file path where the image is stored. 
        // This runs fine on all devices, except Samsung ones. 
        Uri selectedImage = returnIntent.getData(); 

        if(selectedImage == null) { 
         if(returnIntent.getExtras() != null && 
          returnIntent.getExtras().get(AppConstants.DATA) != null) { 

          // But, I get the image Bitmap here. Means the image is stored in disk. 
          Bitmap bmp = (Bitmap) returnIntent.getExtras().get(AppConstants.DATA); 
         } 
        } 
       } catch (Exception e) { 
        // 
       } 
      } 
     } 
    } 
} 

ここでの問題は、上記のコードは、私が(HTCの、SEの)を試してみましたが、それは何らかの形でサムスンのものに失敗したすべてのデバイスで正常に動作しています。 "Uri selectedImage = returnIntent.getData();"何も返さない私のアプリケーション全体がファイルパスのこの論理を上回って構築されているので、私は進めることができません。 解決方法はありますか?

+0

解決策を見つけましたか? – Sharj

答えて

11

画像のファイル名を指定できるインテントのEXTRA_OUTPUTパラメータを指定するコードはSpecify filename for picture to be takenを参照してください。アクティビティの結果が呼び出されたときのファイル名を覚えておいて、intent.getDataがNULLの場合はそれを使用してください。

そして、そのバグレポートの他のコメントを読んだ場合、

+0

私は "ファイル名を覚えよう"を試みますが、ActivityForResultが呼び出されるとメンバー変数もnullです... – ogborstad

+0

@ogborstadは変数を静的フィールドとして宣言し、nullに初期化しません。そうでない場合は変数が上書きされます。 – Merlin

+0

この質問が投稿されてからしばらくしていることは分かっていますが、画像ギャラリーから画像を取得するためにこれをどうやってやるのか分かりますか?明らかに、いくつかの電話機では、Uri uri = data.getData();は常にnullを返します(S3 mini、W8L..something)。 – Sebek

3

画像を保存するファイルパスを生成して、メンバー変数に保存することをお勧めします。次に、カメラアクティビティを呼び出すときは、MediaStore.EXTRA_OUTPUTの余分な場所に(Uriとして)配置します。

必ずonSaveInstanceState()とonRestoreInstanceState()をオーバーライドし、このパスを適切に保存/復元してください。これは、システムがその間にあなたの活動を再開することを決定した場合でも、あなたがそれを持っているかどうかを確実にします(向きの変更やメモリ不足のために非常に可能です)。

+0

上記の例で、savedInstanceState()およびonRestoreInstanceState()を処理する方法の例を教えてください。 – Darpan

関連する問題