Как узнать, где приложение сохранило мое изменяемое растровое изображение? - PullRequest
0 голосов
/ 22 февраля 2019

Я работаю над генератором мемов.Сейчас я пытаюсь загрузить фотографию со своего устройства, добавить подписи к ней через Canvas и сохранить новое растровое изображение в приложении «Галерея» моего устройства, создав в нем новую папку.Это моя попытка:

public void createBitmapAndSave(ImageView img){
        BitmapDrawable bitmapDrawable = ((BitmapDrawable) img.getDrawable());
        Bitmap bitmap = bitmapDrawable.getBitmap();
        Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

        Canvas canvas = new Canvas(mutableBitmap);
        Paint paint = new Paint();

        String topText = topTextView.getText().toString();
        String bottomText = bottomTextView.getText().toString();

        canvas.drawText(topText, 0, 0, paint);
        canvas.drawText(bottomText, 50, 50, paint);

        File file;

        String path = Environment.getExternalStorageDirectory().toString();

        file = new File(path, "Meme" + ".jpg");

        try{
            OutputStream stream = null;

            stream = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);
            stream.flush();
            stream.close();
        }catch (IOException e){ e.printStackTrace(); }

    }

И я вызываю метод в моем BroadcastReceiver:

private BroadcastReceiver listener = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent ) {
            String data = intent.getStringExtra("DATA");
            Toast.makeText(context, data + " received", Toast.LENGTH_SHORT).show();
            createBitmapAndSave(imageView);
        }
    };

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

ОБНОВЛЕНИЕ

Я нашел проблему.Я решил разместить тостовое сообщение внутри блока try / catch, чтобы посмотреть, работает ли поток вообще, потому что раньше он был вне блока try / catch, и я видел его при каждом запуске.Вот что я сделал:

public void createBitmapAndSave(ImageView img){
        BitmapDrawable bitmapDrawable = ((BitmapDrawable) img.getDrawable());
        Bitmap bitmap = bitmapDrawable.getBitmap();
        Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

        Canvas canvas = new Canvas(mutableBitmap);
        Paint paint = new Paint();

        String topText = topTextView.getText().toString();
        String bottomText = bottomTextView.getText().toString();

        canvas.drawText(topText, 0, 0, paint);
        canvas.drawText(bottomText, 50, 50, paint);

        File file;

        String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
        file = new File(path, "Meme" + ".jpg");

        try{
            OutputStream stream = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);
            stream.flush();
            stream.close();
            Toast.makeText(getContext(), path, Toast.LENGTH_SHORT).show();
        }catch (IOException e){ e.printStackTrace();}
    }

Так вот, я вообще не вижу тостового сообщения.Кажется, поток даже не работает должным образом, но я не понимаю, почему это не так.

1 Ответ

0 голосов
/ 22 февраля 2019

Не используйте String path = Environment.getExternalStorageDirectory().toString();, он будет хранить ваш файл в личном хранилище, которое невидимо для пользователя.

использовать File path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES);

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