1

Je suis en train d'inclure l'image partage dans ma demande et que tout fonctionne, mais le sélecteur de part prend beaucoup de temps à apparaître sur les appareilsintention de l'action prend beaucoup de temps à apparaître

ici est ce que je fais:

J'ai ImageView « items_details_image » et je veux partager son image pour pouvoir l'envoyer par WhatsApp et d'autres applications

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) { 

    } 
} 

voici comment je reçois bitmap d'image 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; 
} 

Je ne sais pas pourquoi il prend plus de temps que d'habitude comparer avec d'autres applications sur le même appareil, tels que la galerie ou tout

Répondre

1

Vous faites disque d'E/S sur le fil principal de l'application, dans getLocalBitmapUri() . Cela va geler votre interface utilisateur tant qu'il faut pour écrire votre bitmap sur le disque.

+0

alors devrais-je faire une asynctask pour maintenir getLocalBitmapUri? –

+1

@YazanAllahham: Encore mieux serait de faire autre chose. Ce 'ImageView' a son image de quelque part. Si ce "quelque part" existe déjà à un emplacement "Uri", utilisez simplement la source originale de l'image. – CommonsWare

+0

Wooow! c'était fantastique ! Je vous remercie. puisque j'utilise UniversalImageLoader, je pourrais avoir l'image Uri dans l'événement onLoadingComplete de l'ImageLoader! ... vous m'avez sauvé des heures !!! –