2012-01-26 3 views
6

Ho un'app che cattura uno screenshot e lo condivide con l'intento di condivisione. Piuttosto che salvare più immagini ogni volta che un utente vuole semplicemente condividere l'immagine. Di seguito è riportato il codice che ho usato per le immagini salvate sulla SDAndroid: Bitmap di condivisione non salvata su SD

Intent share = new Intent(Intent.ACTION_SEND); 
share.setType("image/png"); 

dir = "file://" + Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Folder/" + location; 
share.putExtra(Intent.EXTRA_STREAM, Uri.parse(dir)); 

startActivity(Intent.createChooser(share, "Share Image")); 

Tuttavia Non riesco a capire come salvare semplicemente un bitmap come ...

share.putExtra(Intent.EXTRA_STREAM, theBitmap); 

C'è un modo per farlo senza salvare l'immagine?

Grazie

risposta

4

Quello che ho fatto è stato salvare una immagine "Temp" su SD/Phone e sovrascrivere semplicemente ogni volta.

+0

Questo è quello che ho fatto anch'io, ma preferirei non dover usare la scheda SD (e chiedere i permessi di lettura/scrittura della memoria esterna). Sembra che ci sarebbe un modo per farlo con l'archiviazione interna. – Suragch

+0

Vale la pena leggere questa domanda e risposta http://stackoverflow.com/questions/9049143/android-share-intent-for-a-mapmap-is-it-possible-not-to-save-it-prior-sharing – Suragch

-1

Sì, è possibile inviare l'immagine senza doverla salvare come un file. Da solo guardando il codice è scritto non ho idea di come la vostra inviando l'immagine, ma si converte il file con il seguente:

   ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       byte[] data; 
       if(yourBitmap!=null){ 
       yourBitmap.compress(CompressFormat.PNG, 75, bos); 
       }else if (yourBitmap==null){ 
        Log.w("Image going to server is null","Lost in memory"); 
       } 
       try{ 
       data = bos.toByteArray(); 

Non so se l'invio l'immagine ad un altro utente tramite la vostra applicazione o cosa ma questo è il modo in cui lo uso caricare su un server. Quando hai finito con l'immagine, annulleresti tutto così.

+0

Ciao, è più un problema con share.putExtra (Intent.EXTRA_STREAM, Uri.parse (dir)) cosa si suppone essere al posto del Uri? – Chris

+0

Non riesco a far funzionare tutto questo, ho provato share.putExtra (Intent.EXTRA_STREAM, data) ma nulla si attacca e i dati non sono nulli. Qualche idea? – Chris

+0

Come stai usando l'intento di inviare l'array di byte? Da quello che capisco, non puoi semplicemente mettere le cose in un intento e farle automaticamente per così dire. Normalmente utilizzi un intento per avviare un'altra attività o utilizzarla per avviare un servizio. Penso che forse dovresti cercare di allegare un file ad una email o un testo attraverso un intento perché dopo aver letto il tuo post ora che Ive ha dormito sembra che tu abbia bisogno di creare un'immagine, usare un riferimento ad essa nei dati e allegare il riferimento di esso per l'intento e quindi utilizzare startActivity. Sono fuori dalla porta in questo momento quindi spero che l'aiuto –

1

Provare a utilizzare questo:

Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
Uri uri = Uri.parse("android.resource://com.your.app/drawable/" + yourimage); 
shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
shareIntent.putExtra(Intent.EXTRA_TEXT, shareImage); 
shareIntent.setType("image/*"); 
startActivity(Intent.createChooser(shareIntent, "Send your image")); 

Questo codice funziona bene per me di inviare drawable che uso nella mia app. Nessuna immagine salvata su scheda SD. L'unico problema è che non funziona con alcune app sociali:/

+0

solo prende i drawable dalla tua app, spero che questo aiuti. –

+0

Ma questo non è d'aiuto per le nuove immagini che crei con la tua app. – Suragch