"ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: GLThread 11" на Android Froyo 2.2 - PullRequest
2 голосов
/ 20 мая 2011

Я много гуглил и нашел несколько потоков по переполнению стека, но это не помогло. Я пытаюсь использовать встроенную камеру Android, вызывая Intent. Это работает на 2.1, но на 2.2 я получаю исключение "FATAL EXCEPTION: GLThread 11".

Я читаю эту тему Сбой камеры в Android 2.2

И гугл нить http://code.google.com/p/android/issues/detail?id=7909

    String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "temp-" + System.currentTimeMillis() + ".jpg";

    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, fileName);
    values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");

    imageUri = ctx.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);


    //http://marakana.com/forums/android/examples/39.html
    ctx.startActivityForResult(intent, REQUEST_CODE);

Это код, который я использую для вызова камеры. Я полагаю, прямо. Но когда я делаю снимок и нажимаю кнопку «Сохранить» / «Принять», приложение вылетает в Android 2.2. На мой взгляд, это стандартный код и функциональность. Как я могу использовать встроенную камеру. Я пробовал несколько вещей.

1 Ответ

2 голосов
/ 27 мая 2011

Позвольте мне самому ответить :) Мне удалось заставить его работать. Я все еще открываю Android. Прежде всего, приведенный выше код никогда не будет работать. Тем не менее, работать с камерой ... и проверять это все еще адская работа. Я не могу получить намерение работать в эмуляторе для 2.2, для 2.1 это работает. Но код работает на 2.2 и 2.1 на устройстве. Еще одна странная вещь, которую я обнаружил, заключается в том, что при подключении отладчика к устройству невозможно использовать MediaStore.Images.Media.EXTERNAL_CONTENT_URI. Выдает ошибку, что внешнее хранилище не существует. Это связано с подключением USB. Во всяком случае, код, используемый для намерения камеры:

        String fileName = System.currentTimeMillis() + ".jpg";
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, fileName);
        values.put(MediaStore.Images.Media.DESCRIPTION, "Image capture by camera");
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");

        try
        {
            imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        }
        catch (Exception e)
        {
            Log.e(TAG, "", e);
        }

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

        ctx.startActivityForResult(intent, REQUEST_CODE_PHOTO);

Довольно стандартно, я добавил уловку try, чтобы приложение не зависало при подключении отладчика к моему устройству. Если вы передадите null для MediaStore.EXTRA_OUTPUT, камера покажет сообщение, что SD-карта не найдена. Что лучше, чем сбой.

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

В эмуляторе для 2.2 ошибка «FATAL EXCEPTION: GLThread 11» по-прежнему выдается, когда я пытаюсь использовать камеру, которая раздражает. У кого-нибудь есть решение заставить его работать на эмуляторе?

...