Android - несоответствия в реализации - PullRequest
0 голосов
/ 22 ноября 2011

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

Например, я оставил свои попытки сделать снимок с камеры с помощью Intent. Потому что только ограниченный набор устройств ведет себя как положено.

Другой пример, когда я использую байтовый массив из onPictureTakenCallback:

public void onPictureTaken(byte[] data, Camera camera) {
    byte[] tempData = new byte[data.length];
    System.arraycopy(data, 0, dataTemp, 0, data.length);
    ///...
}

Так что, если я не сделаю копию, а использую оригинальный массив данных через некоторое время, у меня возникнут проблемы, потому что некоторые устройства очищают этот массив через некоторое время. Но другие устройства не выполняют такую ​​очистку, поэтому она отлично работает без копирования.

Еще один пример: Некоторые устройства возвращают ноль, когда:

Camera.Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
// sizes is null

Но большинство устройств (я думаю) возвращают список поддерживаемых размеров.

Так что мне интересно, есть ли какая-либо база знаний / FAQ, собранная по таким проблемам? Если нет, давайте разместим здесь вопросы, с которыми мы столкнулись?

1 Ответ

1 голос
/ 22 ноября 2011

Я не знаю об этом.Но получаемый вами байтовый массив сопоставляется и контролирует другое (собственное) приложение (и, следовательно, данные могут отправляться на усмотрение приложения камеры, если он использует этот буфер)

Лучший способ - скопировать его в безопасноеместоположение как можно скорее

Что касается размеров предварительного просмотра - они беспорядок.Даже если вы получите этот список, на самом деле не все разрешения поддерживаются (я получил segfaults на больших разрешениях - буфер предварительного просмотра как-то не подошел).Единственный способ - проверить, поддерживается ли этот размер предварительного просмотра, по очереди активируя их и ожидая исключения

...