Android Studio e Jni C

Standard

Con questo breve tutorial, cercherò di illustrare in modo semplice come scrivere e richiamare funzioni scritte in codice C all’interno del nostro progetto Android.

Requisiti necessari: Android Studio, Android NDK, una conoscenza base del linguaggio C e dei comandi Unix.

Creazione del Progetto Android

Apriamo Android Studio e creiamo un nuovo progetto dal nome Math (poiché la libreria che andremo a scrivere in C conterrà funzioni matematiche), specifichiamo un Company name  (nel caso specifico com.appnjoy), selezioniamo Empty Activity e proseguiamo sino al termine del wizard di creazione del progetto.

 

Creazione cartella jni

Sulla parte sinistra di Android Studio selezioniamo la vista Project (che ci permette di visualizzare l’albero gerarchico dei file che compongono il nostro progetto) e posizionandoci sulla cartella src, creiamo al suo interno la cartella jni che conterrà i nostri sorgenti C ed il make file.

All’interno della cartella jni, creiamo il file Math.c

func

Per prima cosa, includiamo il file jni.h necessario per la definizione dei tipi. Il nome della funzione va scelto in base al seguente pattern:

Java_<package-name>_<activity-name>_<function-name>

nel nostro caso, volendo scrivere la funzione somma, questa risulterà:  Java_com_appnjoy_math_MainActivity_somma

All’interno della cartella jni, creiamo il file Android.mk che conterrà le istruzioni necessarie per la compilazione della libreria.

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := mathc
LOCAL_SRC_FILES := Math.c
include $(BUILD_SHARED_LIBRARY)

 

Build della Libreria

Dal Terminal di Android, attraverso i comandi della shell posizioniamoci all’interno della cartella jni, e da qui digitiamo ndk-build.

Se il comando non viene riconosciuto, probabilmente il percorso che punta all’ installazione dell’NDK non è presente nel PATH di sistema che necessita quindi di essere opportunamente aggiunto.

In alternativa si può sempre specificare il percorso assoluto del comando, nel mio caso:

$ /home/carmelo/Android/Sdk/ndk-bundle/ndk-build

Se la build è andata a buon fine, otterremo una schermata simile alla seguente:

compileok

Il comando ndk-build creerà sotto la cartella app/src la cartella libs all’interno del quale troveremo la nostra libreria libmathc.so.

Effettuiamo adesso un refactor della cartella libs in jniLibs e andiamola a spostare sotto la cartella main.

La cartella jniLibs è la cartella dove la funzione System.loadLibrary(..) si aspetta di trovare le librerie native.

 

Uso della libreria nativa C dal Java

All’interno della classe MainActivity, dichiariamo il prototipo della funzione statica somma, carichiamo la libreria attraverso la funzione System.loadLibrary(“mathc”) ed infine utilizziamo la funzione somma con due valori numerici da noi scelti (in questo caso 120 e 50).

code

Effettuando un build dell’APK, se tutto ha funzionato correttamente, eseguendo l’applicazione, il Logcat ci stamperà il risultato della somma dei due numeri ottenuta tramite codice nativo della nostra libreria.

final

 

Annunci

Unforgettappble – L’app per non dimenticare più nulla in auto

Standard

Unforgettappble è un app che ti aiuta a non dimenticare più nulla nella tua auto, la busta della spesa nel tuo portabagagli, il gatto nel suo trasportino e soprattutto, i bimbi in auto sotto il sole!!

L’ app nasce dall’esigenza di arginare un fenomeno che purtroppo è in forte crescita in tutto il mondo e che spesso passa inosservato ai nostri occhi perché pensiamo non possa mai interessarci in prima persona.

Negli Stati Uniti muoiono ogni anno in media 36 bambini a causa dell’ipertermia per essere stati lasciati in auto, per un totale di 468 morti negli ultimi 12 anni.

In Francia, tra il 2007 ed il 2009 ci sono stati 24 casi di ipertermia in bambini rimasti chiusi in macchina, di cui 5 mortali.

Purtroppo anche l’Italia sembra non essere da meno con i recenti casi accaduti proprio negli ultimi mesi.

E’ BENE SAPERE CHE

Quando fa molto caldo i neonati e i bambini piccoli (per la loro ridotta superficie corporea) sono più esposti degli adulti al rischio di un aumento eccessivo della temperatura corporea (ipertermia) e a disidratazione, con possibili conseguenze dannose sul sistema cardiocircolatorio, respiratorio e neurologico, che possono causare anche la morte.

  • La temperatura corporea di un bambino sale da 3 a 5 volte più velocemente rispetto a quella di un adulto, per la presenza di una minore quantità di acqua nelle riserve corporee.
  • Quando fa molto caldo, la temperatura all’interno di un’automobile può salire da 10° a 15°C ogni 15 minuti! E, anche aprendo i finestrini, non si riduce in modo significativo l’innalzamento della temperatura nell’abitacolo.
  • L’ipertermia può verificarsi in soli 20 minuti e la morte può avvenire entro circa 2 ore.
  • L’ipertermia può verificarsi anche nelle giornate fresche, con temperature intorno ai 22°C.

Infatti, l’abitacolo della macchina può surriscaldarsi (specialmente se l’auto è parcheggiata al sole) fino a superare i 40°C, anche se i valori di temperatura esterna non sono particolarmente elevati.

  • La maggior parte delle vittime di ipertermia ha un’età compresa tra 0 e 4 anni.

COME FUNZIONA L’APP UNFORGETTAPPBLE

Ogni volta che entriamo in auto, effettuiamo un check-in delle cose, animali o persone per cui vogliamo essere notificati ad intervalli regolari di tempo, in maniera intelligente e non invasiva.

Per fare ciò, basterà effettuare un semplice TAP su un adesivo NFC (che possiamo posizionare ad esempio sul cruscotto) precedentemente programmato tramite l’app con uno dei 4 profili messi a disposizione dell’utente (Profilo Bimbo, Profilo Animale, Profilo Cibo, Profilo Personalizzato) ed iniziare a ricevere le notifiche in base al profilo scelto.

1  2  3

L’app consente di utilizzare simultaneamente i 4 profili a nostra disposizione dandoci la possibilità per ognuno di essi di impostare diversi parametri, ad esempio:

• Ogni quanto essere notificati
• Personalizzare la notifica sonora
• Scegliere se utilizzare la notifica intelligente che posticipa la notifica nel caso in cui l’app rilevi che siamo ancora alla guida della nostra auto.
• Di avvisare un amico tramite sms e/o email (precedentemente preimpostati dall’utente) nel caso di mancata disattivazione dell’allarme.
• Dopo quante notifiche perse inviare l’sms e/o la mail.

Una volta attivata l’app con un tap sul TAG NFC, trascorso il tempo preimpostato inizieremo a ricevere le notifiche del profilo selezionato e se raggiunto il massimo di avvisi ignorati, l’app contatterà automaticamente la persona da noi scelta.

Se invece decidiamo di non essere più notificati, è sufficiente uno swipe per la disattivazione.

Se volete dare un’occhiata,sul sito del Play store si può scaricare l’app in versione Beta ed approfondirne il funzionamento grazie ad un video esplicativo.

Feedback / consigli sono sempre ben graditi.

Download Unforgettappble

30Th Anniversary Amiga, Html5 intro demo revised 2.0

Standard

So much time is passed since the Amiga golden times.

Who lived in the 80s / 90s can not forget this fantastic dream machine.

Today, i want to show you my latest Amiga tribute intro (version 2.0) running into a html 5 canvas.

Comparing with version 1.0, this is completely rewritten from scratch and it introduces new features:

  • Larger Canvas
  • Fluid animations
  • More stars on screen
  • Amiga ball now is animated
  • Animated multi-colored lines.
  • Sin scrolling
  • Custom fonts

If you want to take a look, you can watch it here AMIGA DEMO

You can also find a Git repository here Amiga Demo Git repo

ENJOY 🙂

 

Android basic template App

Standard

Starting from version 5.0 Lollipop, lots of new features where introduced by Google in Android: one above all: Material Design.

While all the time users are excited about new features, on the opposite site, developers can be a bit less because they have constantly update their code.

A good approach that i feel to suggest to all the developers out there that make them save time and resources is to create a basic template app which enclose all the new features from scratch.

This take many advantages:

  •  You acquire a deep knowledge of that feature.
  •  You don’t have to re-invent the wheel rewriting code all the time you need.

Today i want to show you one of my latest Android project template which i use as a starting point for app development.

It includes:

  • Toolbar instead of Actionbar
  • A Material Design Drawer Layout
  • A RecycleView implementing a full click listener
  • Sliding Tab inside Fragments
  • Login with Facebook credential

A git repository can be found here: Android basic app Template 

If you wish you can watch a video demo

 

 

Sms Locate Me

Standard

Sms Locate me is one of my latest Android app which i developed mainly for myself.

There are plenty of applications which allow to keep track of your friends, but mostly they need to use internet connection to communicate each other.

With Sms Locate Me, the communication process is standalone and doesn’t involve in any way the presence of an internet connection.

It allows you to localize your friends with just an sms. It’s very simple to use. You and your friend install the application and add each other to the list of Control / Authorizathion.

By clicking the button “Ask for request”, an sms is sent to your friend. The App automatically gather information about his/her position (using the new Android Fused Location Provider for a more accurate positioning detection), and send back these information to the sender which can visualize his/her friend position in a map and discover the approximate address.

This application will be released soon on Google Play in two versions, a free one with a limitation of three position requests, and a paid one with no limitation and ad at all.

Please note:  requesting a friend position has a cost of two sms, one for the sender and one for the receiver.

Screenshot_2015-02-14-14-37-50 Screenshot_2015-02-14-14-41-42 Screenshot_2015-02-14-14-41-54

Sounds of Happiness

Standard

Sooner or later it happens to everyone to feel mooody or depressed.
A good medicine has been often a friend’s word of comfort, a music dear to our heart or simply a contagious laughter.

How important is the sound for our well-being?

The human body is a set of vibrations and waves and the sound has a big impact on it, it acts on different parts of our brain thus controlling stress, pain, anxiety and anguish, harmonizes our bioenergetic system, promotes sleep, stimulates creativity and influence our emotional sphere in a totally positive way.

If we should associate a color to our positive feelings, which one would we choose?

Sounds of Happiness is a social hub that is giving a voice to your emotions through the magic that only the human voice can convey.
Capture your happy moments by recording a message, a music or a sound that makes you feel good, tag it, color it and share it with everyone.

Sounds of happiness is a new way to remind the best moments, and influence positively the emotions of others.

Download Sounds of Happiness from Google Play

1 2 3 4 5 6

Android – Start a service on boot completed

Standard

In this article, i will explain how it is possible to launch a service that runs in background when the Androids OS boots.

All the magic is done by the the intent action android.intent.action.BOOT_COMPLETED that Android sends in broadcast  when the boot operation is completed.

Of course, to allow our application to catch this action, we have to define our Receiver and use a special permission in our Manifest.

Manifest.xml

Broadcast receiver definition
receiver

Using permission
permission

Service definition
service

autoAvvio.java

broadcastJava

The method onReceive will fire as soon as the intent action BOOT_COMPLETED is catched, and as you can see from the code above, an intent tries to lanch our service defined in the class autoAvvioService.

autoAvvioService.java

onstartCommand

Inside our service class, we have to focus our attention to the method onStartCommand that fires the service.
In this case it starts an activity and shows a short message on the screen, but of course it could start any other operation like a http request, port listening, etc