Совместное использование скриншота на Android. Делит одно и то же изображение каждый раз
Я создал функцию, которая делает снимок экрана, сохраняет его во временный файл типа.jpeg, а затем позволяет пользователям делиться им на Facebook или Bluetooth. Вот моя функция поделиться:
public Bitmap Share(View v) {
// Sound
soundPool.play(button_sound, 1.0f, 1.0f, 0, 0, 1.0f);
// Image
v.setDrawingCacheEnabled(true);
v.setLayerType(View.LAYER_TYPE_NONE, null);
Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache());
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + "temporary_file.jpg");
try {
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, ostream);
ostream.close();
} catch (Exception e) {
e.printStackTrace();
}
// Share
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
String filel = "file://" + Environment.getExternalStorageDirectory()
+ File.separator + "temporary_file.jpg";
share.putExtra(Intent.EXTRA_STREAM, Uri.parse(filel));
startActivity(Intent.createChooser(share, "Share Image"));
return bitmap;
}
Моя проблема в том, что он делает снимок экрана, но затем всегда делит один и тот же снимок экрана снова и снова, когда я пытаюсь поделиться новым снимком. Когда я проверяю с помощью файлового менеджера, изображение отличается. Так что я не знаю, что вызывает это.
Большое спасибо за ваше время.
2 ответа
Первый, file.createNewFile()
работает только тогда, когда файл не существует. Он не выдает никаких исключений при неудаче, он только возвращает true
для успеха и false
для неудач,
То же самое верно для bitmap.compress(Bitmap.CompressFormat.JPEG, 90, ostream);
, Этот метод также не выдает никаких исключений при сбое, а только возвращает true
для успеха и false
для неудач,
Я не знаю, является ли это причиной ошибки, но вы можете посмотреть на это. Например, вы можете сначала попытаться удалить файл, если он уже существует.
Пожалуйста, сделайте недействительным () ваше представление перед getBitmap
выглядит как:
v.inValidated();
v.setDrawingCacheEnabled(true);