2015-12-05 6 views
0

Je souhaite mettre à jour une image dans mon application à l'aide d'un éditeur d'image externe. J'utilise le code suivant pour démarrer une application pour mettre à jour l'image.La Galerie de photos Android ne renvoie pas l'URI lorsque vous utilisez l'intention.ACTION_EDIT

private void dispatchAdjustImage(){ 

    try { 
     Integer mImageId = ImageHelper.getImageIdFromRealPath(getString(R.string.imageFilePath) + getString(R.string.imageFileName), getContentResolver()); 
     Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath(mImageId.toString()).build(); 

     Intent adjustPictureIntent = new Intent(); 
     adjustPictureIntent.setDataAndType(uri, "image/*"); 
     adjustPictureIntent.setAction(Intent.ACTION_EDIT); 
     adjustPictureIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     adjustPictureIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     startActivityForResult(adjustPictureIntent, REQUEST_IMAGE_ADJUST); 
    }catch (ActivityNotFoundException anfe) { 
     Global.showDialog(NfScannerActivity.this, getString(R.string.msgErrorAdjustImageAppMissing), 
       getString(R.string.msgDownloadPhotoEditor), getString(R.string.textYes), 
       getString(R.string.textNo), getString(R.string.motorolaGalleryGooglePlayLink)).show(); 
    }catch (Exception ex) { 
     Toast.makeText(mContext, R.string.msgErrorAdjustImage, Toast.LENGTH_LONG).show(); 
    } 
} 

et c'est le onActivityResult

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    switch (requestCode) 
    { 
     case REQUEST_IMAGE_ADJUST: 
      getAdjustImageResults(resultCode, intent); 
      unprotectViewFields(); 
      break; 
    } 

} 

private void getAdjustImageResults(int resultCode, Intent intent) { 

    if (resultCode == Activity.RESULT_OK) 
    { 
     clearViewFields(); 
     try { 
      Uri adjustedImageUri = intent.getData(); 
      String mFullFileName = ImageHelper.getRealPathFromURI(adjustedImageUri, this); 
      mImageBitmap = ImageHelper.readImageFromDisk(mFullFileName); 
      ImageHelper.deleteImageFromDisk(mFullFileName); 
      saveAndLoadImage(); 

     } catch (Exception e) { 
      showErrorDialog(getString(R.string.msgErrorAdjustImage)); 
     } 
    } 
} 

Lorsque j'utilise la galerie Motorola app pour mettre à jour l'image tout va rigth. L'application Motorla Gallery démarre, je mets à jour l'image, l'enregistre et quand le contrôle est retourné à onActivityResult, il est possible d'obtenir et de gérer l'image mise à jour. Le but est retourné comme cette intention = {} intention @ 5486 intention {dat = contenu: // media/externe/images/media/22544}

Quand je l'utilise Google Photo application du code intent.getData () renvoie une intention comme celle-ci intention = {Intent @ 5486} Intention {typ = image/jpeg} dans le débogueur. Il n'y a pas d'Uri dans l'intention retournée et je ne suis pas capable d'obtenir l'image qui a été mise à jour. Il n'y a pas d'extras aussi.

Qu'est-ce qui me manque? Merci.

Répondre

1

The documentation for ACTION_EDIT indique clairement:

sortie: rien.

Par conséquent, "l'application Google Photo" fonctionne correctement. En premier lieu, vous connaissez le Uri à l'image, parce que vous le mettez dans le ACTION_EDITIntent. Alors, utilisez ça.

+0

Salut CommnsWare, vous êtes rigth. Juste choisi l'image mise à jour de l'URI précédent pour Google Photo App. Motorola Gallery App renvoie une intention car elle crée une nouvelle image. Merci +1. – Carlos