2

これはまれなケースです。samsung galaxy s3 でネイティブ カメラ アクティビティから画像をキャプチャしようとしていますが、onActivityResult ファイルはまだ読み取ることができません。電話を切断して再度接続すると、エクスプローラーに画像が表示されます。

カメラのアクティビティが遅延または何かでファイルを書き込むのが好きです...

すべての質問と回答、および他のフォーラムを読みましたが、それは私の問題です。私のコード:

... onCreate
      File file = new File( _path );
      pathUri = Uri.fromFile( file );
...

  protected void startCameraActivity()
    {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, pathUri);
        startActivityForResult( intent, CAMERA_REQUEST_CODE );
    }    

  protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {   
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK)
        {
        // test if exits image
        if((new File(_path)).exists())
            ... do something
        }
    ... continue

if((new File(_path)).exists()) は常にFALSEを返しますが、どうすれば可能ですか?

事前に

4

1 に答える 1

2

アプリでこれが発生するのを見たことがありません。ただし、これは回避策になる可能性があります。

注:アクティビティ全体で使用できるように、Uriインスタンスをグローバルに宣言します。initialURI名前を命名規則に合った名前に変更することもできます。

この例では、インテントがトリガーされる直前に、保存するイメージの特定のパスを .xml の名前とともに渡しますFile

Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE");

File cameraFolder;

if (android.os.Environment.getExternalStorageState().equals
        (android.os.Environment.MEDIA_MOUNTED))
    cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(),
            "SOME_FOLDER_NAME/");
else
    cameraFolder= StatusUpdate.this.getCacheDir();
if(!cameraFolder.exists())
    cameraFolder.mkdirs();

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss");
String timeStamp = dateFormat.format(new Date());
String imageFileName = "picture_" + timeStamp + ".jpg";

File photo = new File(Environment.getExternalStorageDirectory(), 
        "SOME_FOLDER_NAME/" + imageFileName);
getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
initialURI = Uri.fromFile(photo);

startActivityForResult(getCameraImage, ACTION_REQUEST_CAMERA);

そして最後にonActivityResult()

注:これはうまくいくはずだと思います。私のアプリケーションは Aviary SDK を使用しており、そのコードは、この方法で行われる従来の作業とは大きく異なります。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK) {

        // USE EITHER THIS
        imgView.setImageURI(initialURI);

        // OR USE THIS
        getContentResolver().notifyChange(initialURI, null);

        ContentResolver cr = getContentResolver();

        try {   
            // SET THE IMAGE FROM THE CAMERA TO THE IMAGEVIEW
            Bitmap bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, initialURI);

            // SET THE IMAGE USING THE BITMAP
            imgvwSelectedImage.setImageBitmap(bitmap);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

SD カードに保存されているイメージが必要ない場合は、使用が終わったら削除できます。これは私が推測しています(OPが問題に直面していることを経験したことがないので推測しています)これでうまくいくはずです。

おー。ほとんど忘れていました。マニフェスト ファイルでこのアクセス許可を宣言する必要があります。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2013-04-08T03:57:16.963 に答える