2013-07-24 14 views
8
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    filePath = getOutputMediaFile(FileColumns.MEDIA_TYPE_IMAGE); 
    File file = new File(filePath); 
    Uri output = Uri.fromFile(file); 
    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    i.putExtra(MediaStore.EXTRA_OUTPUT, output); 
    startActivityForResult(i, RETURN_FILE_PATH); 
} 

    @Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    //data is always null here. 
    //requestCode = RETURN_FILE_PATH; 
    //resultCode = Activity.RESULT_OK; 
} 

ho controllato i valori per di file e uscita Uri, entrambi sono fine e l'immagine catturata in realtà esiste in quella posizione.onActivityResult restituisce i dati nulli per un'immagine Cattura

Ma i dati restituiti in onActivityResult sono sempre null anche dopo l'acquisizione dell'immagine.

EDIT:

ho controllato questa domanda:

onActivityResult returns with data = null

che dice:

Ogni volta che si salva un'immagine passando EXTRAOUTPUT con l'intento fotocamera il parametro dei dati all'interno di onActivityResult restituisce sempre null. Quindi, anziché utilizzare i dati per recuperare l'immagine, utilizzare il percorso file su recuperare la bitmap.

e forse quella soluzione funzionerà per me. Ma il codice di cui sopra era un codice funzionante fino ad ora per lo stesso scenario.

risposta

18

In base a questo post i dati sono nulli quando si preinserisce un uri. Ciò significa che è già definito la tua uri uscita qui:

i.putExtra(MediaStore.EXTRA_OUTPUT, output); 

Quindi, quando si ottiene un Activity.RESULT_OK; basta caricare la foto scattata dal suo URL conosciuto.

+0

Sì, ho appena visto quel post. Ma lo stesso codice ha funzionato negli ultimi 6 mesi perché tutto ad un tratto ora si comporta in questo modo :( –

+1

Sfortunatamente non sono esperto su questo argomento metto quello che immagino sia una funzionalità specifica del dispositivo relativa all'hardware. c'è un comportamento diverso sui dispositivi Samsung: http://stackoverflow.com/q/8248327/1965084 – alex

0

Basta inserire questo codice nel tuo onActivityResult. Lo stesso problema che ho affrontato su alcuni dispositivi e questo ha risolto il mio problema. Spero che questo ti possa aiutare.

try { 

    Uri selectedImage = output; 

    if (selectedImage == null) 
     return; 

    String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
    cursor.moveToFirst(); 
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
    String picturePath = cursor.getString(columnIndex); 
    cursor.close(); 

} catch (Exception e) { 
    return; 
}  

Si otterrà il percorso Picture in PicturePath variabile e Uri in SelectedImage variabile.

1

Prova questo codice funziona per me.

else if(requestCode == Constant.PICK_FROM_CAMERA) 
      { 

       if (resultCode == Activity.RESULT_OK) 
       { 
        if(data!=null) 
        { 
         mImageCaptureUri = data.getData(); 
         //path= mImageCaptureUri.getPath(); 
         try 
         { 
          path = getPath(mImageCaptureUri,Wonderlistpage.this); //from Gallery 
         } 
         catch(Exception e) 
         { 
          path = mImageCaptureUri.getPath(); 
          Log.i("check image attach or not", e.toString()); 
         } 

         String arr[] = path.split("/"); 
         int i; 
         String k = null; 
         for(i=0;i<arr.length;i++) 
         { 
          k=arr[i];  
         } 
         photoname="_"+String.valueOf(System.currentTimeMillis()) +k; 
         if(setprofileimage_sendimagewithmessage==1) 
         { 
          performCrop(mImageCaptureUri); 
         } 
         else 
         { 
           loading_details="CAMERA"; 
           new performBackgroundTask33().execute(); 
         } 
        } 
        else 
        { 
file1 = new File(Environment.getExternalStorageDirectory(), 
            String.valueOf(System.currentTimeMillis()) + "_FromCamera.jpg"); 

         Uri mImageCaptureUri = Uri.fromFile(file1); 
         try 
         { 
          path = getPath(mImageCaptureUri,Wonderlistpage.this); //from Gallery 
         } 
         catch(Exception e) 
         { 
          path = mImageCaptureUri.getPath(); 
          Log.i("check image attach or not", e.toString()); 
         } 
         String arr[] = path.split("/"); 
         int i; 
         String k = null; 
         for(i=0;i<arr.length;i++) 
         { 
          k=arr[i];  
         } 
         photoname="_"+String.valueOf(System.currentTimeMillis()) +k; 
         if(setprofileimage_sendimagewithmessage==1) 
         { 
          performCrop(mImageCaptureUri); 
         } 
         else 
         { 
           loading_details="CAMERA"; 
           new performBackgroundTask33().execute(); 
         } 

        } 

        //new UploadTask().execute(); 
       } 
      } 
1

Try seguente codice

 { 
      final String[] imageColumns = { MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA }; 

      final String imageOrderBy = MediaStore.Images.Media._ID + " DESC"; 
      Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy); 
      imageCursor.moveToFirst(); 
      do { 
       String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
       if (fullPath.contains("DCIM")) { 

        //get bitmap from fullpath here. 
        return; 
       } 
      } 
      while (imageCursor.moveToNext()); 
0

Se la vostra attività è launchmode come SingleInstance nella vostra manifesta allora si sarebbe affrontare questo problema. Prova a cambiarlo. Come annulla il risultato ogni volta.

Problemi correlati