Приложение PhoneGap завершает работу после захвата изображения камерой.[Android] - PullRequest
16 голосов
/ 16 февраля 2012

Я получаю сообщение об ошибке с Phonegap 1.4.1.

Приложение телефонной пробки, которое я создаю, перезапускается после того, как я возвращаюсь в приложение после съемки.

Вот код, который я использую:

function capturePhoto() {
  // Take picture using device camera and retrieve image as base64-encoded string
  navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI });
}

function onPhotoURISuccess(imageURI) {
  // Uncomment to view the image file URI 
  // console.log(imageURI);

  // Get image handle
  //
  var largeImage = document.getElementById('largeImage');

  // Unhide image elements
  //
  largeImage.style.display = 'block';

  // Show the captured photo
  // The inline CSS rules are used to resize the image
  //
  largeImage.src = imageURI;
}

Ответы [ 10 ]

4 голосов
/ 19 октября 2012

У меня была такая же проблема в течение 2 дней, пока я не обнаружил, что у вас должен быть доступ к разрешению на получение файла изображения, которое вы взяли на устройстве.По умолчанию нет разрешения на возврат изображения, поэтому оно возвращает ноль, и ваше приложение вылетает.

Если вы используете Cordova / PhoneGap в XCode, то вам также следует создать файл Config.xml в папке www и дать разрешениечтобы получить доступ к файлу изображения.

<feature name="http://api.phonegap.com/1.0/device" />
<feature name="http://api.phonegap.com/1.0/battery"/>
<feature name="http://api.phonegap.com/1.0/camera"/>
<feature name="http://api.phonegap.com/1.0/contacts"/>
<feature name="http://api.phonegap.com/1.0/file"/>
<feature name="http://api.phonegap.com/1.0/geolocation"/>
<feature name="http://api.phonegap.com/1.0/media"/>
<feature name="http://api.phonegap.com/1.0/network"/>
<feature name="http://api.phonegap.com/1.0/notification"/>

Если вы работаете на Android, дайте разрешение на файл AndroidManifest.xml.

вы можете найти все для файла config.xml здесь: https://build.phonegap.com/docs/config-xml

2 голосов
/ 13 сентября 2013

Может быть, вашей мобильной памяти недостаточно, Эта проблема на самом деле не связана с PhoneGap.Это распространенная проблема и для нативных приложений для Android. Это происходит потому, что при срабатывании камеры активность андроида становится фоновой (состояние onStop), ожидая, когда камера сделает снимок.Затем GC приходит и убивает действие, чтобы освободить память перед завершением действия камеры, и когда камера завершена, ваша активность уже умерла.Вот почему приложение перезапускается.

Вот мои предложения

1. Замените плагин cramer, избегайте использования пользовательских плагинов, запускающих сборку мусора, (http://code.google.com/p/foreground-camera-plugin/, http://code.google.com/p/foreground-gallery- plugin /) 2. Обнаруживает память, если ее недостаточно для уничтожения других процессов, активно освобождает память 3. Улучшайте их выживание, старайтесь избегать освобождения памяти в выбранной системе.

    private void clearMemory(boolean killAll)
{
    mklog("当前系统可用内存大小是:" + getAvailMemory(getApplicationContext()));
    ActivityManager activityManger = (ActivityManager) this
            .getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> 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);
}
2 голосов
/ 20 мая 2013

используйте передний план-камеру-плагин, это решит эту проблему:

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

1 голос
/ 18 апреля 2012

Понижение до 25 и использование <preference name="android-minSdkVersion" value="7" /> помогло мне!

1 голос
/ 02 марта 2012

Эта проблема на самом деле не о Phonegap.Это общая проблема и для нативных приложений для Android.

См. Камера PhoneGap перезапускает приложение

1 голос
/ 16 февраля 2012

Убедитесь, что ваш тег активности в вашем AndroidManifest.xml имеет следующий атрибут:

android:configChanges="orientation|keyboardHidden"

Изменение ориентации приведет к перезагрузке приложения. Если вы действительно получаете сбой, запустите "adb logcat", чтобы зафиксировать возникшую ошибку.

0 голосов
/ 08 апреля 2014

DATA_URI не рекомендуется время от времени, не возвращается в приложение.Поскольку DATA_URI дает строку base64, поэтому некоторым устройствам не хватает памяти для этого.используйте только FILE_URI , это безопасно для устройства Android.

если вам нужна строка Base64, значит вы выполняете скрытие после перехвата вызова, используя Файл readAsDataURL

ссылка на эту ссылку

0 голосов
/ 07 марта 2013

У меня Samsung Galaxy Note II. У меня такая же проблема. Я изменил это в AndroidManifest.xml и теперь он работает на Samsung и HTC Thunderbolt

<uses-feature android:name="android.hardware.camera" android:required="false"/>

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="10"/>

<activity  android:configChanges="orientation|keyboardHidden" />
0 голосов
/ 16 апреля 2012

Для меня хитрость заключалась в том, чтобы изменить манифест из:

<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14"/>

до

<uses-sdk android:minSdkVersion="7" />

Теперь это работает, но я понятия не имею, почему ...

0 голосов
/ 16 февраля 2012

Попробуйте уменьшить параметр качества до 25. Некоторым устройствам не хватает памяти на 50.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...