16 Stimmen

Phonegap-App beendet sich nachdem Kamera Bild aufgenommen hat. [Android]

Ich bekomme einen Fehler mit Phonegap 1.4.1.

Die Phonegap-App, die ich erstelle, startet neu, nachdem ich zur App zurückgekehrt bin, nachdem ich ein Bild aufgenommen habe.

Hier ist der Code, den ich benutze:

function capturePhoto() {
  // Bild mit Kameragerät aufnehmen und als base64-kodierten String abrufen
  navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI });
}

function onPhotoURISuccess(imageURI) {
  // Uncomment um die Bild-Datei-URI anzuzeigen
  // console.log(imageURI);

  // Bild-Handle abrufen
  //
  var largeImage = document.getElementById('largeImage');

  // Bild-Elemente einblenden
  //
  largeImage.style.display = 'block';

  // Das aufgenommene Foto anzeigen
  // Die Inline-CSS-Regeln werden verwendet, um das Bild zu skalieren
  //
  largeImage.src = imageURI;
}

4voto

uzair Punkte 56

Ich hatte das gleiche Problem für 2 Tage, bis ich herausfand, dass Sie Zugriff auf die Berechtigung haben sollten, um die Bilddatei, die Sie auf dem Gerät aufgenommen haben, zu erhalten. Standardmäßig gibt es keine Berechtigung, um das Bild zurückzugeben, daher wird es null zurückgeben und Ihre App stürzt ab.

Wenn Sie Cordova/PhoneGap in Xcode verwenden, sollten Sie auch die Config.xml-Datei im www-Ordner erstellen und Berechtigung zum Zugriff auf die Bilddatei geben.

Wenn Sie an Android arbeiten, geben Sie Berechtigung in der AndroidManifest.xml-Datei.

Sie können hier alles für die config.xml-Datei finden: https://build.phonegap.com/docs/config-xml

2voto

Nullify Punkte 20595

Verwenden Sie das foreground-camera-plugin, es wird dieses Problem beheben:

https://code.google.com/p/foreground-camera-plugin/

2voto

Jack Punkte 11449

Vielleicht reicht der Speicher Ihres Mobiltelefons nicht aus. Dieses Problem betrifft nicht nur Phonegap. Es ist auch ein häufiges Problem bei nativen Android-Apps. Es tritt auf, weil die Kamera ausgelöst wird, die Android-Aktivität in den Hintergrund wechselt (Zustand onStop) und auf die Aufnahme des Bildes wartet. Dann kommt der GC und beendet die Aktivität, um Speicher freizugeben, bevor die Kameraaktion abgeschlossen ist, und wenn die Kamera fertig ist, ist Ihre Aktivität bereits beendet. Deshalb wird die App neu gestartet.

Hier sind meine Vorschläge:

1. Ersetzen Sie das Kameraplugin, vermeiden Sie die Verwendung benutzerdefinierter Plugins, starten Sie Garbage Collection (http://code.google.com/p/foreground-camera-plugin/, http://code.google.com/p/foreground-gallery- Plugin) 2. Überprüfen Sie den Speicher, um andere Prozesse zu beenden, um Speicher freizugeben 3. Verbessern Sie deren Überlebensfähigkeit, versuchen Sie, die Freigabe von Speicher im ausgewählten System zu vermeiden.

private void clearMemory(boolean killAll)
{
    mklog("" + getAvailMemory(getApplicationContext()));
    ActivityManager activityManger = (ActivityManager) this
            .getSystemService(ACTIVITY_SERVICE);
    List list = activityManger
            .getRunningAppProcesses();
    if (list != null)
        for (int i = 0; i < list.size(); i++)
        {
            ActivityManager.RunningAppProcessInfo apinfo = list.get(i);

            System.out.println("pid            " + apinfo.pid);
            System.out.println("processName              "
                    + apinfo.processName);
            System.out
                    .println("importance            " + apinfo.importance);
            String[] pkgList = apinfo.pkgList;

            if (apinfo.importance >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND
                    || (killAll && apinfo.importance >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE))
            {
                // Process.killProcess(apinfo.pid);
                for (int j = 0; j < pkgList.length; j++)
                {
                    activityManger.killBackgroundProcesses(pkgList[j]);
                    mklog("" + pkgList[j]);
                }
            }

        }

    mklog(" " + getAvailMemory(getApplicationContext()));
}

private long getAvailMemory(Context context)
{
    ActivityManager am = (ActivityManager) context
            .getSystemService(Context.ACTIVITY_SERVICE);
    MemoryInfo mi = new MemoryInfo();
    am.getMemoryInfo(mi);
    return mi.availMem / (1024 * 1024);
}   
      public void mklog(String contentString)
{
    Log.i("Web Console", contentString);
}

1voto

Simon MacDonald Punkte 23243

Stellen Sie sicher, dass Ihr Aktivitäts-Tag in Ihrer AndroidManifest.xml das folgende Attribut hat:

android:configChanges="orientation|keyboardHidden"

Die Änderung der Ausrichtung wird dazu führen, dass Ihre App neu geladen wird. Wenn es tatsächlich zu einem Absturz kommt, führen Sie "adb logcat" aus, um den aufgetretenen Fehler zu erfassen.

1voto

Vinícius Fonseca Punkte 494

Dieses Problem betrifft eigentlich nicht nur Phonegap. Es handelt sich um ein häufiges Problem auch bei nativen Android-Apps.

Siehe PhoneGap Kamera startet die Anwendung neu

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X