0

携帯電話で撮影した写真のURIを取得しようとしています。私は "onActivityResult"に渡されたデータをURIに変換しようとしています。そして、このURIをデータベースに格納する文字列に変換します。この方法は動画でも機能しますので、どのように写真でこれを実現できますか?データをURIに変換しようとすると、NULLポインタ例外が発生します。別の機能を使用して写真データをURIに変換する必要がありますか?Android - 撮影した写真のURLを取得する方法

takePhotosButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent startPhotoFunction = new Intent(); 
      startPhotoFunction.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(startPhotoFunction, REQUEST_CODE_PHOTO); 
     } 
    }); 

onActivityResult方法:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    try { 
     switch (requestCode) { 
      case REQUEST_CODE_VIDEO: 

       videoUri = data.getData(); 

       String videoPath = videoUri.toString(); 
       videoDB.addVideoRow(videoPath); 

       //displayVideo.setVideoURI(videoUri); 
       //displayVideo.start(); 
       break; 

     case REQUEST_CODE_PHOTO: 

      photoUri = data.getData(); 

      String photoPath = photoUri.toString(); 
      videoDB.addPhotoRow(photoPath); 
      break; 
     } 
    }catch (NullPointerException e){ 
    //prevent crash when returning with Null data to mainactivity. 
    } 

} 

UPDATED写真のキャプチャを開始する

recordVideoButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent startVideoFunction = new Intent(); 
      startVideoFunction.setAction(MediaStore.ACTION_VIDEO_CAPTURE); 
      startActivityForResult(startVideoFunction, REQUEST_CODE_VIDEO); 
     } 
    }); 

ボタンの意図:

ボタンの目的は、ビデオレコーダーを起動するために次のように私のコードですonActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) { 
    // try { 
     switch (requestCode) { 
      case REQUEST_CODE_VIDEO: 

       videoUri = data.getData(); 

       String videoPath = videoUri.toString(); 
       videoDB.addVideoRow(videoPath); 

       //displayVideo.setVideoURI(videoUri); 
       //displayVideo.start(); 
       break; 

     case REQUEST_CODE_PHOTO: 

      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      Uri tempUri = getImageUri(getApplicationContext(), photo); 

      File finalFile = new File(getRealPathFromURI(tempUri)); 

      String photoPath = finalFile.toString(); 


      videoDB.addPhotoRow(photoPath); 

      break; 
     } 
    //}catch (NullPointerException e){ 
    //prevent crash when returning with Null data to mainactivity. 
    //} 

} 


public Uri getImageUri(Context inContext, Bitmap inImage) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 
    return Uri.parse(path); 
} 

public String getRealPathFromURI(Uri uri) { 
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
} 

答えて

0

イメージからUriを取得するには:下記のコードを使用してビットマップをUriに変換します。ビットマップ圧縮形式をPNGに変更することはできますが、使用しないでください。.compress行は使用しないでください。 PNGは圧縮されません。ウリからの絶対パスを取得するために

public Uri getImageUri(Context inContext, Bitmap inImage) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); // Used for compression rate of the Image : 100 means no compression 
    String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "xyz", null); 
    return Uri.parse(path); 
} 

は、この方法

public String getRealPathFromURI(Uri uri) { 
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int id_uri = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(id_uri); 
} 

に、これはあなたの問題を解決希望を使用しています。

0

あなたは間違っています。これで撮影した画像のサムネイルのみを保存し、ファイルに保存します。オリジナルのフルイメージはすでにファイルシステム上のファイルにあります。

撮影する画像を保存する場所をカメラアプリに通知します。 EXTRA_OUTPUTにはputExtraを使用します。

+0

Hi greenapps。私はこれを見て、putExtra EXTRA_OUTPUTを見つけました。私はこれがonActivityResultに送られた意図に写真のUriを加えるだけで、問題を解決すると信じています。しかし、putExtraを使ってUriを追加する方法はわかりません。どうやってそれを行うのか気になりますか? –

+0

例のためだけにgoogle。このサイトには何百人もあります。 uriはonActivityの結果のパラメータとして利用できません。あなたは、使用されたURIを '覚え'なければなりません。 – greenapps

+0

私は持っていますが、私はまだこれらの例を自分のコードに適応させるのに苦労しています。 Uriをインテントに追加するために実際のファイルは必要ありませんか? –

関連する問題