Question

Je suis en train de recadrer une image de la galerie de médias. Je suis en mesure d'accéder à l'image, démarrez l'outil de recadrage par défaut et même enregistrer le résultat de l'image recadrée.

Toutefois, l'intention J'utilise simplement ne renvoie aucun résultat si la culture a réussi.

Ma principale méthode:

// Crop photo intent.
Intent intent = new Intent("com.android.camera.action.CROP", null);         
intent.setData(uri);   
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createTempCroppedImageFile());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

// Publish intent to crop picture.
activity.startActivityForResult(intent, activity.CROP_PHOTO_REQUEST_CODE);  

- onActivityResult () Method -

// Photo crop activity.
if (requestCode == CROP_PHOTO_REQUEST_CODE) {
    if (resultCode == RESULT_OK) {
        Log.d(TAG, "user cropped a photo");
        signupScreen.setImage(new PhotoTool(this).getTempCroppedImageFileLocation());
    } else
        Log.d(TAG, "user cancelled photo crop");
}

Si je résilie de l'activité agricole, je reçois le message « Recadrage de la photo utilisateur a annulé » avec succès. Mais si je recadrer une image, la nouvelle image recadrée apparaît dans le répertoire cible, mais la fonction onActivityResult () jamais est appelé. Ce qui donne?

En regardant le LogCat, je trouve que tous les I temps sauvegarder l'image recadrée, "JavaBinder" se plaint "Failed Binder Transaction". Je comprends que cela est en quelque sorte lié à la mémoire, mais le fichier est recadrée seulement 24KB taille.

Était-ce utile?

La solution

Trouvé le problème à cette question. Il est malheureusement une limitation Android.

Voir Android Cropper ne peut pas aller au-delà de 256?

J'avais mis la sortie de mon image recadrée à 400x400. Malheureusement, le métayer par défaut Android ne peut faire 256x256. Il en est ainsi tout à fait frustrant, surtout quand il n'y a pas de documentation sur les limites.

Autres conseils

Demandez-vous setResult(int) (lien ) dans l'intention des cultures?

UPDATE : \

L'envoi RESULT_CANCELLED est la valeur par défaut. Il sera toujours renvoyé à moins que vous mettre en œuvre un certain nombre de choses.

Dans votre intention de récolte, lorsque vous avez terminé la l'édition (à savoir l'utilisateur tape le bouton faire, ou quelque chose de similaire), une partie de ce processus appellerait setResult(RESULT_OK).

exemple:

public void doneBTNPressed( View view ) {
    if ( view.getId() == R.id.doneBTN ) {
        this.isCropped = true;
    }
}

@Override    
protected void onPause() {
        if ( this.isCropped ) {
            setResult(RESUL_OK);
        }
        super.onPause();
    }

Ce résultat (RESULT_OK, plus un autre entier spécifié) est transmis de retour à l'activité appelant (en supposant startActivityForResult () a été utilisé). Il y avait aussi quelques remplacements, en fonction de vos besoins. Dans l'appelant activité (parent), vous devez implelement onActivityResultint,int,Intent) pour obtenir le résultat de l'activité sortie.

Dans le lien indiqué ci-dessus, il y a une section intitulée « Démarrage des activités et obtenir des résultats », ce qui explique les multiples façons d'obtenir des informations sur une sortie actvity.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top