Frage

Ich versuche, ein Bild aus der Mediengalerie zu tauchen. Ich kann auf das Bild zugreifen, das Standard -Ernte -Tool starten und sogar das geschnittene Bildergebnis speichern.

Die Absicht, die ich benutze, wird jedoch keine Ergebnisse zurückgeben, wenn das Zuschneiden erfolgreich war.

Meine Hauptmethode:

// 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 () Methode -

// 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");
}

Wenn ich die Ernteaktivität abnehme, erhalte ich die Meldung "Nutzerner stornierte Fotoernte" erfolgreich. Wenn ich jedoch ein Bild tete, erscheint das neue geschnittene Bild im Zielverzeichnis, aber die Funktion von OnactivityResult () wird nie aufgerufen. Was gibt?

Wenn ich mir den Logcat ansiehst, stelle ich fest, dass "Javabinder" jedes Mal, wenn ich das geschnittene Bild speichere, beschwert "fehlgeschlagene Bindemittel -Transaktion". Ich verstehe, dass dies irgendwie mit dem Speicher zusammenhängt, aber die verkaufte Datei hat nur eine Größe von 24 kb.

War es hilfreich?

Lösung

Fand das Problem für dieses Problem. Es ist leider eine Android -Einschränkung.

Sehen Android Cropper kann nicht über 256 hinausgehen?

Ich hatte die Ausgabe meines verkauften Bildes auf 400 x 400 gesetzt. Leider kann Androids Standard -Cropper nur 256x256 ausführen. Dies ist so frustrierend, besonders wenn keine Dokumentation zu Grenzen vorliegt.

Andere Tipps

Rufst du an setResult(int) (Verknüpfung) in der Ernteabsicht?

AKTUALISIEREN:\

Senden von Ergebnis_Cancelled ist der Standard. Es wird immer zurückgeschickt, es sei denn, Sie implementieren ein paar Dinge.

Wenn Sie die Bearbeitung beendet haben (dh der Benutzer taps auf die Taste Done oder ähnliches), würde ein Teil dieses Vorgangs in Ihrer Ernteabsicht aufgerufen setResult(RESULT_OK).

Beispiel:

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();
    }

Dieses Ergebnis (result_ok, plus eine andere Ganzzahl, die Sie angegeben haben) wird an die Anrufaktivität zurückgegeben (unter der Annahme, dass StartActivityForresult () verwendet wurde). Abhängig von Ihren Bedürfnissen auch einige Überschreibungen. In der aufrufenden (übergeordneten) Aktivität müssten Sie sich implelementieren onActivityResultint,int,Intent) Um das Ergebnis aus der austretenden Aktivität zu erhalten.

In dem oben angegebenen Link gibt es einen Abschnitt mit dem Titel "Startaktivitäten und Ergebnisse des Erhaltens", in dem die verschiedenen Möglichkeiten erläutert werden, Informationen aus einer austretenden Aktualisierung herauszuholen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top