​
Showing posts with label un. Show all posts
Showing posts with label un. Show all posts

Wednesday, 12 July 2017

Créer un Live Wallpaper sous Android

Créer un Live Wallpaper sous Android



  • Un live wallpaper a un contenu dynamique, ce qui permet d�avoir des animations. C�est donc � vous de g�rer les diff�rentes �tapes de dessin sur le wallpaper. Pour cela, on utilise les deux classes Runnable et Handler.

    Le handler envoi le runnable (ici drawer) dans le messageQueue associ� � l�UI Thread afin qu�il soit ex�cut�. Ce runnable se charge de dessiner sur le wallpaper gr�ce � la m�thode draw() qu�on expliquera plus tard. R�p�ter plusieurs fois ce m�canisme nous permet d�avoir une animation.

    Quand le wallpaper doit s�arr�ter, la variable visible (qui stocke la visibilit� actuelle du wallpaper) passe � false dans les m�thodes onSurfaceDestroyed()�et �onVisibilityChanged() ce qui stoppera l�animation (m�thode handler.removeCallbacks(drawer).)

    Quand le wallpaper devient visible, la variable visible passe � true dans la m�thode �onVisibilityChanged() , ce qui relance l�animation du wallpaper (m�thode handler.post(drawer).)

    Voyons maintenant comment on dessine sur le wallpaper, la m�thode facilitant cette op�ration est la m�thode draw() :

    private void draw() {
    SurfaceHolder holder = getSurfaceHolder();
    Canvas canvas = null;
    try {
    canvas = holder.lockCanvas();
    if (canvas != null) {
    float x = (width * random.nextFloat());
    float y = (height * random.nextFloat());
    drawImage(canvas, x, y);
    }
    } finally {
    if (canvas != null)
    holder.unlockCanvasAndPost(canvas);
    }
    handler.removeCallbacks(drawer);
    if (visible) {
    //On re-poste le runnable apr�s un petit laps de temps
    handler.postDelayed(drawer, 4000);
    }
    }


    La m�thode qui permet de dessiner l�image dans le canvas est d�crite ci-dessous�:

    private void drawImage(Canvas canvas, float x, float y) {
    canvas.drawColor(Color.WHITE);
    canvas.drawBitmap(androidPic, x-(androidPic.getWidth()/2), y-(androidPic.getHeight()/2), null);
    }


    Sans oublier de d�clarer la variable qui repr�sente l�image qu�on veut dessiner�:

    Bitmap androidPic = BitmapFactory.decodeResource(getResources(), R.drawable.android);


    Explications :

    Nous avons utilis� un Canvas, ce qui nous permet de dessiner de mani�re r�p�titive sur la Surface du wallpaper. Cette surface est fournie par la classe ��SurfaceView��.

    Afin de manipuler cette surface on utilise l�interface SurfaceHolder. On obtient le canvas grace � la m�thode lockCanvas(), puis on dessine sur un point du canvas avec la m�thode drawImage().Ce point est obtenu al�atoirement gr�ce � ses coordonn�s (x,y).

    Enfin la m�thode unlockCanvasAndPost(canvas) est appel� pour que le canvas soit d�ssin� sur la surface du wallpaper.

    Gestion des �v�nements tactiles�:


    Cela se fait gr�ce � la m�thode onTouchEvent(MotioEvent event), cette m�thode poss�de le m�me comportement que la m�thode draw(), sauf que cette fois les coordonn�es du point o� s�effectue le dessin sont obtenus � l�endroit ou l�interaction utilisateur est effectu�e.

    @Override
    public void onTouchEvent(MotionEvent event) {
    float X = event.getX();
    float Y = event.getY();
    SurfaceHolder holder = getSurfaceHolder();
    Canvas canvas = null;
    try {
    canvas = holder.lockCanvas();
    if (canvas != null) {
    canvas.drawColor(Color.WHITE);
    drawImage(canvas, X, Y);
    }
    } finally {
    if (canvas != null)
    holder.unlockCanvasAndPost(canvas);
    }
    handler.removeCallbacks(drawer);
    if (visible) {
    handler.postDelayed(drawer, 4000);
    }
    super.onTouchEvent(event);
    }

    Ce qui donnera :
    import java.util.Random;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.os.Handler;
    import android.service.wallpaper.WallpaperService;
    import android.view.MotionEvent;
    import android.view.SurfaceHolder;

    public class MyLiveWallpaper extends WallpaperService {

    private static Random random = new Random() ;

    @Override
    public Engine onCreateEngine() {
    return new LiveWallpaperEngine();
    }

    private class LiveWallpaperEngine extends Engine {

    private final Handler handler = new Handler();
    private final Runnable drawer = new Runnable() {
    @Override
    public void run() {
    draw();
    }
    };

    private boolean visible = true;
    private int width;
    private int height;
    Bitmap androidPic = BitmapFactory.decodeResource(getResources(), R.drawable.android);

    public LiveWallpaperEngine() {
    handler.post(drawer);
    }

    @Override
    public void onCreate(SurfaceHolder surfaceHolder) {
    super.onCreate(surfaceHolder);
    setTouchEventsEnabled(true);
    }

    @Override
    public void onDestroy() {
    super.onDestroy();
    handler.removeCallbacks(drawer);
    }

    @Override
    public void onSurfaceCreated(SurfaceHolder holder) {
    super.onSurfaceCreated(holder);
    }

    @Override
    public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    this.width = width;
    this.height = height;
    super.onSurfaceChanged(holder, format, width, height);
    }

    @Override
    public void onSurfaceDestroyed(SurfaceHolder holder) {
    super.onSurfaceDestroyed(holder);
    this.visible = false;
    handler.removeCallbacks(drawer);
    }

    @Override
    public void onVisibilityChanged(boolean visible) {
    this.visible = visible;
    if (visible) {
    handler.post(drawer);
    } else {
    handler.removeCallbacks(drawer);
    }
    }

    @Override
    public void onTouchEvent(MotionEvent event) {
    float X = event.getX();
    float Y = event.getY();
    SurfaceHolder holder = getSurfaceHolder();
    Canvas canvas = null;
    try {
    canvas = holder.lockCanvas();
    if (canvas != null) {
    canvas.drawColor(Color.WHITE);
    drawImage(canvas, X, Y);
    }
    } finally {
    if (canvas != null)
    holder.unlockCanvasAndPost(canvas);
    }
    handler.removeCallbacks(drawer);
    if (visible) {
    handler.postDelayed(drawer, 4000);
    }
    super.onTouchEvent(event);
    }

    private void draw() {
    SurfaceHolder holder = getSurfaceHolder();
    Canvas canvas = null;
    try {
    canvas = holder.lockCanvas();
    if (canvas != null) {
    float x = (width * random.nextFloat());
    float y = (height * random.nextFloat());
    drawImage(canvas, x, y);
    }
    } finally {
    if (canvas != null)
    holder.unlockCanvasAndPost(canvas);
    }
    handler.removeCallbacks(drawer);
    if (visible) {
    //On re-poste le runnable apr�s un petit laps de temps
    handler.postDelayed(drawer, 4000);
    }
    }

    // Permet de dessiner limage dans le canvas
    private void drawImage(Canvas canvas, float x, float y) {
    canvas.drawColor(Color.WHITE);
    canvas.drawBitmap(androidPic, x-(androidPic.getWidth()/2), y-(androidPic.getHeight()/2), null);
    }
    }
    }


    Derni�re �tape, on d�clare notre service dans l�AndroidManifest.xml avec l�action ��android.service.wallpaper.WallpaperService�� et la permission ��android.permission.BIND_WALLPAPER�� qui autorise l�utilisation du Live Wallpaper.
    Notons aussi l�ajout de la balise uses-feature , qui indique � Google Play que votre application contient un Live Wallpaper, pour que celle�ci soit visible qu�aux utilisateurs ayant un device supportant les live wallpapers.

    ?xml version="1.0" encoding="utf-8"?
    manifest
    package="com.tuto.android"
    android_versionCode="1"
    android_versionName="1.0"

    uses-sdk android_minSdkVersion="10" /
    uses-feature android_name="android.software.live_wallpaper"/uses-feature

    application
    android_label="@string/app_name"
    android_icon="@drawable/ic_launcher"

    service
    android_label="@string/my_live_wallpaper"
    android_name=".MyLiveWallpaper"
    android_permission="android.permission.BIND_WALLPAPER"
    intent-filter
    action android_name="android.service.wallpaper.WallpaperService"/action
    /intent-filter
    meta-data android_name="android.service.wallpaper"
    android_resource="@xml/mywallpaper"/meta-data
    /service
    /application

    /manifest

    Sans oublier le String.xml�:
    ?xml version="1.0" encoding="UTF-8"?
    resources

    string name="app_name"Live Wallpaper/string
    string name="my_live_wallpaper"My Live Wallpaper/string
    string name="wallpaper_description"My first live wallpaper/string

    /resources


    Remarque�:


    Pour g�rer les pr�f�rences de votre wallepaper, cr�ez une Pr�f�renceActivity qui permettra de d�finir les configurations de votre fond d��cran. La r�cup�ration des valeurs de vos pr�f�rences s�effectue � l�aide des SharedPreference. Pour cela, ajoutez les lignes suivantes � votre ��wallpaper.xml��:

    android:settingsActivity="MyPreferenceActivity"/


    sans oublier de d�clarer votre activit� dans l�AndroidManifest.xml.

    Lancez maintenant votre application, s�lectionnez le Live Wallpaper que vous avez cr�� afin d�obtenir le r�sultat suivant�:



  • Cr�er un Live Wallpaper sous Android


    Conclusion


    Voila, j�esp�re que cet article vous � permis de mieux comprendre comment fonctionnent les live wallpapers,le code du projet est disponible ici.
    Maintenant place � votre imagination pour cr�er vos propre fond d��cran anim�s.

{ Read More }


Saturday, 1 July 2017

Cose informatiche da non fare in volo far credere di avere un Samsung Galaxy Note 7 “incendiario”

Cose informatiche da non fare in volo far credere di avere un Samsung Galaxy Note 7 “incendiario”


Credit: PhoneArena.
L�articolo � stato aggiornato dopo la pubblicazione iniziale. Ultimo aggiornamento: 2016/12/27 13:25.

 Il 20 dicembre scorso il volo 358 della Virgin America da San Francisco a Boston � stato il teatro di un problema di telefonia mobile piuttosto insolito. Un passeggero, Lucas Wojciechowski, stava cercando il Wi-Fi di bordo con il proprio computer quando si � accorto che a bordo c�era, oltre al Wi-Fi standard, un�altra rete senza fili di nome Samsung Galaxy Note7_1097.

Un nome che mette i brividi, visto che il Samsung Galaxy Note 7 � stato vietato a bordo degli aerei di linea statunitensi dal Dipartimento dei Trasporti per via della sua spiacevole tendenza a prendere fuoco spontaneamente. E se c�� una cosa che non piace n� ai piloti n� ai passeggeri, � un incendio a bordo, come gi� accaduto per colpa di questo dispositivo elettronico difettoso.

Lucas ha dapprima segnalato su Twitter la propria scoperta e poi, sempre su Twitter, ha raccontato il seguito.

Dopo circa un�ora di volo, l�equipaggio ha fatto un annuncio ai passeggeri, chiedendo che l�eventuale possessore del telefonino incendiario si facesse riconoscere. Silenzio inquieto in cabina passeggeri.

Un quarto d�ora dopo, l�equipaggio ha minacciato di accendere le luci (erano le 23 locali) e di perquisire tutti i bagagli in cabina fino a trovare lo smartphone sospetto. Ancora silenzio.

Dopo un�altra quindicina di minuti � intervenuto personalmente il comandante, avvisando che se il proprietario del telefonino non si fosse fatto avanti sarebbe stato necessario far atterrare anticipatamente l�aereo e farlo perquisire, causando disagi a tutti. Trovarsi nel cuore della notte in un aeroporto inatteso dopo un�emergenza (in Wyoming, secondo The Register), ha spiegato il comandante, sarebbe stato �terribile. Non c�� aperto nulla nel terminal. Nulla.�

Queste parole, dettate dal protocollo della compagnia aerea per la gestione dei telefonini a rischio d�incendio, hanno finalmente convinto i passeggeri a collaborare, ed � emerso con sorpresa che non c�era a bordo nessun Samsung Galaxy Note 7: semplicemente, uno dei passeggeri aveva attivato la funzione hotspot Wi-Fi del proprio telefonino e le aveva assegnato il nome Samsung Galaxy Note7_1097. Non si sa bene se si sia trattato di un nome scelto automaticamente dal telefonino o se sia stata invece una scelta intenzionale del proprietario.

L�episodio si � concluso felicemente, senza atterraggi d�emergenza, ma ha portato alla luce il fatto che anche il nome di un Wi-Fi oggi � sufficiente a rischiare un�emergenza di un aereo di linea. Quindi se prendete un aereo, gestite responsabilmente il vostro smartphone. Tenetelo spento, se non vi serve, e controllate anche che la funzione hotspot Wi-Fi non si attivi con qualche nome che possa creare inquietudini.

Fate come me: usate come nome NSA oppure CIA.
{ Read More }


Monday, 22 May 2017

Croc Legend of the gobbos UN PACK Tool

Croc Legend of the gobbos UN PACK Tool


Who knows about this great game that falls on Saturn and Playstation more that 10 years ago? Well, today I want to show you my pack/unpack tool about this game.

This isnt the first release, infact a lot of time ago I released an unpacker that works only with the Playstation version. This works with both :). In a single command-line program, you can extract, edit and repack the various files of the game, also I added the possibility to repack the files with the standard alignment of a CD-ROM to speedup the loading times (but this cost an increasing of the output file).

download for win32
{ Read More }