#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));
}