CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: jonn con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: bluemask con ben 5 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 40 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 10 su 10
Discussione:

Fare uno screenshot e aggiungerlo ad un album della gallery

Se questa discussione ti stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid L'avatar di davebaol


    Registrato dal
    Jun 2013
    Messaggi
    10

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Question

    [RISOLTO] Fare uno screenshot e aggiungerlo ad un album della gallery

    Ciao ragazzi, sono nuovo del forum e mi sono appena presentato qui: www .androidiani .com/forum/benvenuto/311300-davebaol-sbarca-su-androidiani-com.html


    Come da titolo ho la necessit di fare uno screenshot e aggiungerlo ad uno specifico album della gallery.
    In realt sono gi riuscito a catturare lo screenshot e anche a pubblicarlo nell'album desiderato, tuttavia a operazione effettuata nella gallery mi ritrovo la stessa immagine duplicata anche nell'album "Fotocamera".
    Come posso fare per evitare il fastidioso doppione?
    Forse potrei rimuoverlo da codice ma preferirei una soluzione pi "elegante".

    Questo il codice che ho utilizzato, il tutto parte da una chiamata al metodo statico createNewScreenshot.


    codice:
    public class ScreenshotUtil {
    
    	public static void createNewScreenshot(Activity activity) {
    		Bitmap bitmap = takeScreenshot(activity);
    		addToAlbumGallery(activity, bitmap);
    		bitmap.recycle();
    	}
    
    	private static Bitmap takeScreenshot(Activity activity) {
    		View rootView = activity.findViewById(android.R.id.content)
    				.getRootView();
    		rootView.setDrawingCacheEnabled(true);
    		Bitmap screenshot = Bitmap.createBitmap(rootView.getDrawingCache());
    		rootView.setDrawingCacheEnabled(false);
    		return screenshot;
    	}
    
    	private static void addToAlbumGallery(Context context, Bitmap photo) {
    		ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    		photo.compress(Bitmap.CompressFormat.PNG, 100, bytes);
    
    		// Album directory on the external storage (it's the app name)
    		File dir = new File(Environment.getExternalStorageDirectory(), context
    				.getResources().getString(R.string.app_name));
    
    		// Make sure the album directory exists
    		dir.mkdirs();
    
    		String picName = "pic_" + System.currentTimeMillis();
    
    		File f = new File(dir, picName + ".png");
    
    		try {
    			f.createNewFile();
    
    			// Write bitmap bytes to the file and close the output stream
    			FileOutputStream fo = new FileOutputStream(f);
    			fo.write(bytes.toByteArray());
    			fo.close();
    
    			// Save image to the album gallery
    			MediaStore.Images.Media.insertImage(context.getContentResolver(),
    					f.getAbsolutePath(), picName, "Screenshot");
    		} catch (IOException e) {
    			Log.e("ScrenshotUtil", "addToAlbumGallery", e);
    		}
    
    		// Refresh Android gallery
    		MediaScannerConnection.scanFile(context,
    				new String[] { f.getAbsolutePath() }, null, null);
    
    	}
    }
    Ultima modifica di davebaol; 17-06-13 alle 14:47

  2.  
  3. #2
    Baby Droid L'avatar di davebaol


    Registrato dal
    Jun 2013
    Messaggi
    10

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Thumbs up

    Vabb me la canto e me la suono.
    Ho risolto il problema anche se non mi ancora chiaro perch il codice nel primo post duplicasse la foto in galleria.
    Riporto la soluzione per chi fosse eventualmente interessato.

    Al posto di
    codice:
    		// Save image to the album gallery
    		MediaStore.Images.Media.insertImage(context.getContentResolver(),
    				f.getAbsolutePath(), picName, "Screenshot");
    usate il codice seguente
    codice:
    	// Save image to the gallery album
    	ContentValues values = new ContentValues();
    	values.put(MediaStore.Images.Media.TITLE, f.getName());
    	values.put(MediaStore.Images.Media.DATE_TAKEN, f.lastModified());
    	values.put(MediaStore.Images.Media.DATE_ADDED, f.lastModified());
    	values.put(MediaStore.Images.Media.DATE_MODIFIED, f.lastModified());
    	values.put(MediaStore.Images.Media.BUCKET_DISPLAY_NAME, context
    			.getResources().getString(R.string.app_name));
    	values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
    	values.put(MediaStore.Images.Media.DESCRIPTION, "Screenshot");
    	values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
    	Uri uri = context.getContentResolver().insert(
    			MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

  4. #3
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    31

    Ringraziamenti
    2
    Ringraziato 2 volte in 2 Posts
    Predefinito

    Ciao,
    sto cercando anche io di inserire lo screenshot all' interno della mia app.
    Questo codice funziona correttamente? Poi non ho capito, il tuo codice fa lo screenshot di una determinata activity in automatico
    oppure la fai mediante tasti del telefono?
    Grazie
    Ciao

  5. #4
    Baby Droid L'avatar di davebaol


    Registrato dal
    Jun 2013
    Messaggi
    10

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Si funziona correttamente.
    Devi solo chiamare createNewScreenshot passando la activity e ti ritrovi lo screenshot nella gallery.
    Il meccanismo di innesco (pressione tasto o button, gesture, ecc...) e` a carico della app.

  6. #5
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    31

    Ringraziamenti
    2
    Ringraziato 2 volte in 2 Posts
    Predefinito

    A me, purtroppo, non funziona. Mi da' eccezione.

  7. #6
    Baby Droid L'avatar di davebaol


    Registrato dal
    Jun 2013
    Messaggi
    10

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Se posti lo stack trace magari posso aiutarti.

  8. #7
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    31

    Ringraziamenti
    2
    Ringraziato 2 volte in 2 Posts
    Predefinito

    06-20 15:28:25.441: W/dalvikvm(19277): threadid=1: thread exiting with uncaught exception (group=0x4154eba8)
    06-20 15:28:25.451: E/AndroidRuntime(19277): FATAL EXCEPTION: main
    06-20 15:28:25.451: E/AndroidRuntime(19277): Process: it.androidprogramming.formuser, PID: 19277
    06-20 15:28:25.451: E/AndroidRuntime(19277): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.androidprogramming.formuser/it.androidprogramming.formuser.Sixth_Activity}: java.lang.NullPointerException
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2184)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2233)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.app.ActivityThread.access$800(ActivityThre ad.java:135)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1196)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.os.Handler.dispatchMessage(Handler.java:10 2)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.os.Looper.loop(Looper.java:136)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.app.ActivityThread.main(ActivityThread.jav a:5001)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at java.lang.reflect.Method.invokeNative(Native Method)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at java.lang.reflect.Method.invoke(Method.java:515)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:785)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:601)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at dalvik.system.NativeStart.main(Native Method)
    06-20 15:28:25.451: E/AndroidRuntime(19277): Caused by: java.lang.NullPointerException
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.graphics.Bitmap.createBitmap(Bitmap.java:6 13)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at it.androidprogramming.formuser.ScreenShot.takeScre enshot(ScreenShot.java:83)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at it.androidprogramming.formuser.ScreenShot.createNe wScreenshot(ScreenShot.java:21)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at it.androidprogramming.formuser.Sixth_Activity.onCr eate(Sixth_Activity.java:80)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.app.Activity.performCreate(Activity.java:5 231)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1087)
    06-20 15:28:25.451: E/AndroidRuntime(19277): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2148)
    06-20 15:28:25.451: E/AndroidRuntime(19277): ... 11 more

  9. #8
    Baby Droid L'avatar di davebaol


    Registrato dal
    Jun 2013
    Messaggi
    10

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Metti un break point e vai in debug. Per qualche ragione il metodo createBitmap della classe Bitmap di android va in null pointer exception.

  10. #9
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    31

    Ringraziamenti
    2
    Ringraziato 2 volte in 2 Posts
    Predefinito

    L'ho fatto... ma si comporta allo stesso modo.

  11. #10
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    31

    Ringraziamenti
    2
    Ringraziato 2 volte in 2 Posts
    Predefinito

    Ehi davebaol sono riuscito a risolvere il problema...
    Una domanda ma esiste un modo per poter fare lo screenshot ad un' altra activity?
    Ad esempio: activity A e activity B -> dall' activity A vorrei effettuare lo screenshot dell' activity B
    Spero che ci sia un modo per farlo. Se si mi potresti suggerire qualcosa????
    Grazie

    Saluti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy