2012-07-03 6 views
7

Desidero restituire una bitmap nella mia attività, in modo che altre applicazioni possano utilizzarla.Attività restituisce un'immagine

Il ritorno di un testo è chiaro.

Intent data = new Intent(); 
data.putExtra("text1", "text."); 
data.putExtra("text2", "longer text."); 
setResult(RESULT_OK, data); 

Ma come restituire una bitmap?

Altre informazioni: L'attività ha diversi intenti disponibili per tutti coloro che desiderano ottenere un'immagine.

<intent-filter> 
    <action android:name="android.intent.action.GET_CONTENT" /> 
    <category android:name="android.intent.category.OPENABLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="image/*" /> 
    <data android:mimeType="vnd.android.cursor.dir/image" /> 
</intent-filter> 
<intent-filter> 
    <action android:name="android.intent.action.PICK" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="image/*" /> 
    <data android:mimeType="vnd.android.cursor.dir/image" /> 
</intent-filter> 

EDIT: Ecco la soluzione in una funzione:

public void finish(Bitmap bitmap) { 
    try { 
     File folder = new File(Environment.getExternalStorageDirectory() + "/Icon Select/"); 
     if(!folder.exists()) { 
      folder.mkdirs(); 
     } 
     File nomediaFile = new File(folder, ".nomedia"); 
     if(!nomediaFile.exists()) { 
      nomediaFile.createNewFile(); 
     } 

     FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png"); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); 
     File bitmapFile = new File(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png"); 

     if(bitmapFile.exists()) { 
      Intent localIntent = new Intent().setData(Uri.fromFile(bitmapFile)); 
      setResult(RESULT_OK, localIntent);     
     } else { 
      setResult(RESULT_CANCELED); 
     } 
     super.finish(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.d("beewhale", "Error writing data"); 
    } 
} 
+0

Cosa stai cercando di ottenere? Descrivilo –

risposta

5

Mentre sono d'accordo con Ovidiu Latcu, è possibile che si verifichino problemi di memoria.

Potrebbe essere meglio memorizzare la bitmap in una posizione temporanea sulla scheda SD. E poi accedervi da lì. (Scrivi e leggi la bitmap su file).

In alternativa, se si desidera utilizzare un array di byte come extra, comprimere prima la bitmap in un altro formato, ad es. Jpeg o simili, questo di nuovo ridurrà i cambiamenti dei problemi di memoria.

Una semplice immagine da 8 milioni di pixel, è 32 MB (4 livelli). E questo supera l'uso consentito della memoria sulla maggior parte (se non tutti) i telefoni per un'applicazione.

La memorizzazione direttamente nello spazio di archiviazione è il modo in cui l'app per fotocamera integrata funziona per evitare questo problema.

Ecco il mio codice per trattare con esso:

public void showCameraScreen(View view) { 
    // BUILT IN CAMERA 
    Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    camera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this))); 
    this.startActivityForResult(camera, 1); 

} 

private File getTempFile(Context context) { 
    // it will return /sdcard/MyImage.tmp 
    final File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName()); 
    if (!path.exists()) { 
     path.mkdir(); 
    } 
    return new File(path, "MyImage.tmp"); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1 && resultCode == RESULT_OK) { 
     final File file = getTempFile(this); 

     byte[] _data = new byte[(int) file.length()]; 
     try { 
      InputStream in = new FileInputStream(file); 
      in.read(_data); 
      in.close(); 
      in = null; 
      //DO WHAT YOU WANT WITH _data. The byte array of your image. 
     } catch (Exception E) { 

     } 
    } 
} 

Nota: Si sarebbe anche bisogno di scrivere codice sul tuo chiamato intento, che i negozi al Uri passato - Qui, il costruito nel api fotocamera lo fa .

Problemi correlati