Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

21.07.2015, 14:11. Просмотров 1014. Ответов 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" />


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

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

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

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

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

Копьютерный интернет + телефон (фото присутствует) - Android
Добрый день. Искал инфу на многих сайтах,но нарывался только на Англо язычную инфу.. Хотелось бы узнать,как...

Сохранение картинки на телефон - Windows Phone
Как создать функцию ,что бы после нажатия button картинка сохранилась на телефон?

19
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
22.07.2015, 09:59 #16
Попробуйте добывить строку jpg.flush();преде строко jpg.close();
1
dajver
410 / 274 / 18
Регистрация: 18.09.2010
Сообщений: 1,114
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().
0
androbro
340 / 301 / 67
Регистрация: 17.10.2014
Сообщений: 886
22.07.2015, 17:57 #18
Цитата Сообщение от dajver Посмотреть сообщение
raw - это колбек который сохраняет картинку, в ней вызывается метод saveAsImage().
а мне казалось что raw эт сырой формат.
вот может в этом и причина что Вы пытаетесь его сохранить как .jpg
1
dajver
410 / 274 / 18
Регистрация: 18.09.2010
Сообщений: 1,114
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, тоже самое, это не из за формата, просто не заходит в колбек...
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 736
23.07.2015, 08:19 #20
Цитата Сообщение от androbro Посмотреть сообщение
Цитата Сообщение от dajver Посмотреть сообщение
raw - это колбек который сохраняет картинку, в ней вызывается метод saveAsImage().
а мне казалось что raw эт сырой формат.
вот может в этом и причина что Вы пытаетесь его сохранить как .jpg
как сказал один умный чел никто не знает как будет вести себя java если переменные или методы называть
raw, jpg, public, create, takePicture и т.д.
0
23.07.2015, 08:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2015, 08:19
Привет! Вот еще темы с ответами:

Сохранение пропорций в фото - Delphi
Доброго Времени Суток! Я пишу программку показывающую фото на StringGrid. И хотел узнать совета, как можно вывести фотографию, чтобы не...

сохранение фото в файл - PHP
В теге img хранится изображение из canvas. Как сохранить картинку в файл или же как вставить ету картинку в файл(к примеру pdf --...

Сообщение "Служба копирования недоступна или занята" при отправке фото по Bluetooth с ноутбука на телефон - Windows 7
День добрый,нужен ваш совет.Пытаюсь отправить по блютуз фотки с ноута на телефон,ноутбук находит тело но выскакивает сообщение-служба...

Вывод звука на телефон через юсби (телефон без системы) - Софт
Возможно ли такое? имеется usb-шнур и телефон нокия,ну, обычный телефон, за 3к 2 года назад был:) мне бы хотелось вывести звук ноута через...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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