Сохранить снимок экрана с растровым изображением в кэше Android

#android

#Android

Вопрос:

Может кто-нибудь, пожалуйста, помочь мне сохранить приведенный ниже код в кэше, а не на моей SD-карте. Я делаю снимок экрана своего приложения, чтобы использовать его для обмена в социальных сетях.

 
// image naming and path  to include sd card
                String mPath = Environment.getExternalStorageDirectory().toString()   "/"   ACCUWX.IMAGE_APPEND;   

                // create bitmap screen capture
                Bitmap bitmap;
                View v1 = mCurrentUrlMask.getRootView();
                v1.setDrawingCacheEnabled(true);
                bitmap = Bitmap.createBitmap(v1.getDrawingCache());
                v1.setDrawingCacheEnabled(false);

                OutputStream fout = null;
                imageFile = new File(mPath);

                try {
                    fout = new FileOutputStream(imageFile);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
                    fout.flush();
                    fout.close();

                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
  

И вот мой код для социальных сетей, чтобы поделиться скриншотом:

 
Intent socialIntent = new Intent(Intent.ACTION_SEND); 
                    socialIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
                    Uri uri = Uri.fromFile(new File(mPath));

                    socialIntent.putExtra(Intent.EXTRA_STREAM, uri);
                    socialIntent.setType("image/jpeg");

                    startActivity(Intent.createChooser(socialIntent, "How do you wanna share?"));
  

Комментарии:

1. Используйте Context.getCacheDir() вместо Environment.getExternalStorageDirectory()

2. Я не верю, что смогу использовать кэш в своем сценарии. Только мое приложение будет иметь доступ к этому хранилищу, и мне нужно, чтобы социальные сети имели доступ к этому хранилищу, а оно этого не делает и не может.

3. «Мне нужно, чтобы социальные сети имели доступ к этому хранилищу, а оно этого не делает и не может» — это верно, но ваш вопрос был о ТОМ, чтобы НЕ использовать SD-карту. Если вы хотите, чтобы другие приложения / действия и т.д. Могли получить доступ к файлу, его необходимо сохранить во внешнем хранилище (например, на SD-карте). К внешнему хранилищу не применяются разрешения файловой системы, но к внутренней памяти применяются.

Ответ №1:

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

 static HashMap<String, Bitmap> cache=new HashMap<String, Bitmap>();
  

сохранить растровое изображение в кэше

cache.put (имя файла, bmp);

позже, чтобы извлечь растровое изображение из кэша, используйте следующий код,

     if(cache.containsKey(filename)){
        imageView.setImageBitmap(cache.get(filename));
    }