Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
#1

Сохранение фото на телефон - Программирование Android

21.07.2015, 14:11. Просмотров 883. Ответов 19
Метки нет (Все метки)

Народ, какая то фигня случилась, в общем делаю приложение, программа фоткает в фоне дефолтной камерой. Все вроде бы ок, тестировал на nexus 4, на one plus все хорошо, все сохраняет. Как только пробую на самсунгах, на любом из девайсов самсунга фотки не сохраняются, не могу понять в чем проблема, все права есть все должно быть нормально... посоветуйте что то плиз.

Код для делания фотографии
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
private void takePhoto(final Context context) {
        final SurfaceView preview = new SurfaceView(context);
        SurfaceHolder holder = preview.getHolder();
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 
        holder.addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                showMessage("Surface created");
                Camera camera = null;
 
                try {
                    camera = Camera.open();
                    showMessage("Opened camera");
 
                    try {
                        camera.setPreviewDisplay(holder);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
 
                    camera.startPreview();
                    showMessage("Started preview");
 
                    camera.takePicture(null, null, new Camera.PictureCallback() {
 
                        @Override
                        public void onPictureTaken(byte[] data, Camera camera) {
                            showMessage("Took picture");
 
                            saveAsImage(data);
                            camera.release();
                        }
                    });
                } catch (Exception e) {
                    if (camera != null)
                        camera.release();
                    throw new RuntimeException(e);
                }
            }
 
            @Override public void surfaceDestroyed(SurfaceHolder holder) {}
            @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
        });
 
        WindowManager wm = (WindowManager)context
                .getSystemService(Context.WINDOW_SERVICE);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                1, 1,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                0,
                PixelFormat.UNKNOWN);
 
        wm.addView(preview, params);
    }


Код сохранения картинки в папку с фотками
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
 private void saveAsImage(byte[] data) {
        try {
            File cameraFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/Camera");
            if(!cameraFile.exists())
                cameraFile.mkdir();
            File outputFile = new File(cameraFile, "/image_" + randomNumber() + ".jpg");
            FileOutputStream jpg = new FileOutputStream(outputFile);
            jpg.write(data);
            jpg.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


Права
Кликните здесь для просмотра всего текста
XML
1
2
3
4
 <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera2" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


Может у кого то есть какие то идеи по этому поводу, целый день бьюсь и никак не могу понять почему на всех девайсах кроме самсунга норм, а на самсунгах ничего...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2015, 14:11     Сохранение фото на телефон
Посмотрите здесь:

Camera, сохранение пути к фото - Программирование Android
Как получить полный путь к фото, сделанного камерой? @Override public void onClick(View v) { try { // Намерение для...

Сохранение фото в базу данных - Программирование Android
Ребят помогите пожалуйста ! Суть такова есть Activity в ней EditText, ImageButton, Button и база данных. Как в ImageButton загонять фото...

Реализовать распознавание текста на фото и его сохранение - Программирование Android
Доброго времени суток! В своей профессиональной деятельности столкнулся с тем, что периодически приходится переписывать модели и...

Сохранение и восстановление позиции фото при перемещении через ObjectAnimator до и после паузы - Программирование Android
Дано - ObjectAnimator, imageView. ImageView с фотографией должен переместится с левого края до правого. ObjectAnimator начинает свое...

Эмулятор VS телефон - Программирование Android
Здравствуйте. В общем ситуация очень интересная, а интересна она тем, что тестирую приложение на эмуляторе все отлично (хоть и медленно...

Загрузить приложение на телефон - Программирование Android
Нубский конечно вопрос, но как лучше выгрузить на телефон готовое приложение? Что нужно для деплоя, какие файлы?

Телефон не до конца определился ОС - Программирование Android
не получается наладить отладку на телефоне. На одном из форумов мне вот что написали: Если так то что делать?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
21.07.2015, 14:24     Сохранение фото на телефон #2
соединяем телефон с компом, запускаем приложение и смотрим ошибки (если они есть)
с камерой такая беда часто случается, работает по разному на разных устройствах
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
21.07.2015, 14:32  [ТС]     Сохранение фото на телефон #3
Телефона на руках нет, ошибок не выдает, просто стопарится на Started preview и дальше не идет... Бывает идет и дальше но фотки все равно не сохраняет.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
21.07.2015, 14:33     Сохранение фото на телефон #4
dajver, а сама фотка делается? В метод saveAsImage(byte[] data) data не null приходит?
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
21.07.2015, 14:43  [ТС]     Сохранение фото на телефон #5
Цитата Сообщение от Spelcrawler Посмотреть сообщение
а сама фотка делается? В метод saveAsImage(byte[] data) data не null приходит?
Нету девайса на руках, если бы был я бы думаю смог разобраться, хотя кроме моих логов больше ничего не говорит... Могу только сказать что data.length не пустой. Все время разный размер, значит фотки делаются и они не пустые)
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
21.07.2015, 14:50     Сохранение фото на телефон #6
dajver, а рут есть на устройстве? Если есть можно попробовать сохранить фото в data/data и посмотреть что будет. Если сохраниться значит в сторону записи копать, если нет соответственно в сторону съемки, но это не 100% конечно. И может еще mkdir() попробовать заменить на mkdirs().
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
21.07.2015, 14:54  [ТС]     Сохранение фото на телефон #7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
dajver, а рут есть на устройстве? Если есть можно попробовать сохранить фото в data/data и посмотреть что будет. Если сохраниться значит в сторону записи копать, если нет соответственно в сторону съемки, но это не 100% конечно. И может еще mkdir() попробовать заменить на mkdirs().
К сожалению рута нет... По поводу mkdirs, папка то уже такая на телефоне есть, а вот фотка туда не пишется...
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
21.07.2015, 15:04     Сохранение фото на телефон #8
Started preview - иногда требуется писать в двух местах, иногда нет
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
21.07.2015, 15:24     Сохранение фото на телефон #9
а я бы для начала с Environmen поэкспериментировал, и посмотрел бы какие пути при каких значениях предоставляет среда.
да и мб добавил бы на всякий случай
XML
1
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
21.07.2015, 16:09     Сохранение фото на телефон #10
Цитата Сообщение от androbro Посмотреть сообщение
добавил бы на всякий случай
Вроде же автоматом дается, если на запись запросить.
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
21.07.2015, 16:13  [ТС]     Сохранение фото на телефон #11
Цитата Сообщение от androbro Посмотреть сообщение
да и мб добавил бы на всякий случай
Не помогло, видать причина не в этом

а я бы для начала с Environmen поэкспериментировал, и посмотрел бы какие пути при каких значениях предоставляет среда.
Попробовал, если указывать как я указал то метод сам находит папку dcim и пишет туда... Но почему то на самсунгах вот щас получается создать папку Camera, а в ней создаются черные фотки, то есть как будто битые файлы...
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
21.07.2015, 16:18     Сохранение фото на телефон #12
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Вроде же автоматом дается, если на запись запросить.
ок, буду знать
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
21.07.2015, 17:58  [ТС]     Сохранение фото на телефон #13
Больше никаких идей нет?) Я загуглил, думал может найду какие то отличия записи файлов на самсунгах, но не нашел ничего... Файлы пишутся битые, может все таки причина в фотографии? Тогда что сделать что бы фотки фоткались не битые на самсунгах? Ведь на остальных девайсах все нормально...
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
21.07.2015, 18:01     Сохранение фото на телефон #14
Цитата Сообщение от dajver Посмотреть сообщение
Больше никаких идей нет?
Сложно что-то придумать без устройства на руках. Раз файлы теперь пишутся - попробуйте писать размер файлов в какой нибудь текстовый файл. Можно даже писать размер до записи (размер массива байт) и после (размер уже сохраненного файла). Так уже можно будет 100% сказать в чем именно проблема и копать дальше)
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
21.07.2015, 18:03  [ТС]     Сохранение фото на телефон #15
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Сложно что-то придумать без устройства на руках. Раз файлы теперь пишутся - попробуйте писать размер файлов в какой нибудь текстовый файл. Можно даже писать размер до записи (размер массива байт) и после (размер уже сохраненного файла). Так уже можно будет 100% сказать в чем именно проблема и копать дальше)
Интересное предложение но что то мне кажется это не сильно поможет... Блин
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
22.07.2015, 09:59     Сохранение фото на телефон #16
Попробуйте добывить строку jpg.flush();преде строко jpg.close();
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
22.07.2015, 17:53  [ТС]     Сохранение фото на телефон #17
Получил девайс на руки, в общем оказывается что файлы битые создаются, именно на самсунгах... Не понятно почему.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void saveAsImage(byte[] data) {
        int random = randomNumber();
        try {
            File cameraFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/Camera");
            if(!cameraFile.exists())
                cameraFile.mkdirs();
            File outputFile = new File(cameraFile, "/image_" + random + ".jpg");
 
            Log.e("", outputFile.getAbsolutePath());
            SharedPrefs.setImagePath(getApplicationContext(), outputFile.getAbsolutePath());
 
            FileOutputStream jpg = new FileOutputStream(outputFile);
            jpg.write(data);
            jpg.flush();
            jpg.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
На остальных девайсах все хорошо, почему то именно на самсунгах не работает... Ссылку показывает /storage/emulated/0/DCIM/image_1879504572.jpg, перехожу по этому адресу, а там битая картинка...

Добавлено через 20 минут
В общем вот какие дела, если вот так:
Java
1
camera.takePicture(null, null, raw);
то никакие файлы не создаются и оно даже не заходит в takePictureCalBack

если же вот так
Java
1
camera.takePicture(null, raw, null);
То файл создается но картинка не картинка, типа битый... Я не знаю че делать. Хееелп

raw - это колбек который сохраняет картинку, в ней вызывается метод saveAsImage().
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
22.07.2015, 17:57     Сохранение фото на телефон #18
Цитата Сообщение от dajver Посмотреть сообщение
raw - это колбек который сохраняет картинку, в ней вызывается метод saveAsImage().
а мне казалось что raw эт сырой формат.
вот может в этом и причина что Вы пытаетесь его сохранить как .jpg
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
22.07.2015, 18:02  [ТС]     Сохранение фото на телефон #19
Вот он этот колбекк
Java
1
2
3
4
5
6
7
8
9
10
Camera.PictureCallback raw = new Camera.PictureCallback(){
 
        @Override
        public void onPictureTaken(byte[] arg0, Camera arg1) {
            saveAsImage(arg0);
            arg1.release();
 
            showMessage("Tooked picture");
        }
    };
Цитата Сообщение от androbro Посмотреть сообщение
вот может в этом и причина что Вы пытаетесь его сохранить как .jpg
Попробовал в png, тоже самое, это не из за формата, просто не заходит в колбек...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2015, 08:19     Сохранение фото на телефон
Еще ссылки по теме:

Программа не видит телефон - Программирование Android
Здравствуйте! все сделал как описано тут: http://metanit.com/java/android/1.2.php но телефон прога не видет.... куда копать?

Разбудить телефон из сервиса - Программирование Android
Плиз, помогите. Как из сервиса (IntenetService) разбудить телефон на время выполнения какой-либо задачи (в onHandleIntent)? В чем...

Студия не видит телефон - Программирование Android
Есть устройство LG L90 Dual D410 и при подключение его студия не видит это устройсто для отладки(Его нет в списке доступных устройств). Как...

Эмулятор для ПК + телефон - Программирование Android
Доброго времени суток! У меня вопрос есть... видел как то давно на одном видео, сейчас просто не могу вспомнить что за видео и где...

клиент-сервер (телефон+планшет) - Программирование Android
можно создать двохсторонний сервер для телефона и планшета? нужно выполнять запросы на телефоне и планшете... нужно получить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
23.07.2015, 08:19     Сохранение фото на телефон #20
Цитата Сообщение от androbro Посмотреть сообщение
Цитата Сообщение от dajver Посмотреть сообщение
raw - это колбек который сохраняет картинку, в ней вызывается метод saveAsImage().
а мне казалось что raw эт сырой формат.
вот может в этом и причина что Вы пытаетесь его сохранить как .jpg
как сказал один умный чел никто не знает как будет вести себя java если переменные или методы называть
raw, jpg, public, create, takePicture и т.д.
Yandex
Объявления
23.07.2015, 08:19     Сохранение фото на телефон
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru