2012-03-19 9 views
2

ここで私の問題は、私がカメラを使ってUriを取得しようとすると、私はエミュレータでカメラでヌルを取得し、私のデバイスは、私は別のカメラアプリを使用する場合は、システムのカメラをちょっとだけ、常に動作します。ここでは打ち上げのための私のコードカメラで撮影した写真からUriを取得しようとすると、ヌルになります

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST) { 
    ContentResolver cr = getContentResolver(); 
    InputStream in = null; 
    try 
    { 
     in = cr.openInputStream(outputFileUri); 
    } 
    catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
    } 
} 

outputFileUriは常にnullたときに活動リターンを持っている画像を取得するためのカメラアプリ

takePic.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    String captured_image = System.currentTimeMillis() + ".jpg"; 
    File file = new File(Environment.getExternalStorageDirectory(), captured_image); 
    captured_image = file.getAbsolutePath(); 
    outputFileUri = Uri.fromFile(file); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    intent.putExtra("return-data", true); 
    startActivityForResult(intent, CAMERA_REQUEST); 
    } 
}); 

です。おかげさまで

+0

同じ状況に陥った。あなたはこの問題の解決策を見つけましたか? – Mohit

答えて

6

たとえば、写真を撮っている間にデバイスを回転させたため、AndroidがonActivityResultに入る前にあなたのアクティビティを強制終了(および再開)している可能性があります。私は問題は全体のoutputFileUriメンバーVARのあなたの管理に関係していると思います

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if (savedInstanceState != null) 
    { 
     outputFileUri= savedInstanceState.getParcelable("outputFileUri"); 
    } 
} 
+0

文字通り私の一日を節約しました....! :) – Nav

0

...保存し、活動状態の残りの部分とoutputFileUriを復元...

protected void onSaveInstanceState(Bundle outState) 
{ 
    outState.putParcelable("outputFileUri", outputFileUri); 
} 

にしてください標準のAndroidアクティビティライフサイクル。

StartActivityForResultを呼び出すと、アクティビティが停止し、おそらく破棄されます。キャプチャインテントが返されると、アクティビティが再作成され、再開されます。おそらくlifecycleイベント全体にわたってoutputFileUriの値を永続化する必要があります。

onCreateおよびonSaveInstanceStateを参照してください。

サードパーティ製のカメラアプリケーションが何もしていない間に、ネイティブアプリケーションがこれを行うのは私が持っている唯一のエクスペリエンスです。あなたのactivityが実際に破壊されて、あなたのoutputFileUriを拭き取ります。

また、画像が実際にキャプチャされたことを確認するために、uri/filepathをチェックするだけでなく、カメラの意図がOKであることを確認するために、onActivityResultで返されるresultcodeを調べる価値があります。私はそれをしたと思う。

関連する問題