Поделиться намерением занимает много времени, чтобы появиться
Я пытаюсь включить обмен изображениями в своем приложении, и все работает, но средство выбора общего доступа занимает много времени на устройствах
вот что я делаю:
У меня есть ImageView "items_details_image", и я хочу поделиться его изображением, чтобы иметь возможность отправить его через WhatsApp и другие приложения
void ShareImg() {
try {
Uri bmpUri = getLocalBitmapUri(items_details_image);
if (bmpUri != null) {
// Construct a ShareIntent with link to image
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
shareIntent.setType("image/*");
// Launch sharing dialog for image
startActivity(Intent.createChooser(shareIntent, "Share Image"));
} else {
// ...sharing failed, handle error
}
} catch (Exception e) {
}
}
вот как я получаю растровое изображение из URL изображения
public Uri getLocalBitmapUri(ImageView imageView) {
// Extract Bitmap from ImageView drawable
Drawable drawable = imageView.getDrawable();
Bitmap bmp = null;
if (drawable instanceof BitmapDrawable){
bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
} else {
return null;
}
// Store image to default external storage directory
Uri bmpUri = null;
try {
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS), "share_image_" + System.currentTimeMillis() + ".png");
file.getParentFile().mkdirs();
FileOutputStream out = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
bmpUri = Uri.fromFile(file);
} catch (IOException e) {
e.printStackTrace();
}
return bmpUri;
}
Я не знаю, почему это занимает больше времени, чем обычно, сравнивая его с другими приложениями на одном устройстве, такими как галерея или что-то еще
1 ответ
Решение
Вы делаете дисковый ввод-вывод в главном потоке приложения, в getLocalBitmapUri()
, Это замораживает ваш пользовательский интерфейс до тех пор, пока он записывает ваше растровое изображение на диск.