Commit f086b2c2 authored by Jordi Masip's avatar Jordi Masip

Petites correccions i millores :)

parent 5172c649
Pipeline #1019 passed with stages
in 11 seconds
......@@ -116,7 +116,7 @@ Arduino IDE és un programa open-source que facilita programar i puja programa a
%En aquest apartat es descriurà la situació actual del treball. Es definirà el context, l'objectiu i solució del treball.
En aquests últims anys, la gent està rebent una allau d'informació a través de la televisió, l'ordinador, el telèfon inte\l.ligent\dots i les empreses intenten utilitzar tots aquests mitjans que tenen disponibles per comunicar-se amb l'usuari final per vendre els seus productes. Els locals de les ciutats també estan fent servir alguns mitjans per ajudar o millorar els seus negocis. Com per exemple, cada cop més, més locals de menjar es disposen eines webs per vendre els seus productes. \\
Amb aquest projecte es proposa un nou canal de comunicació que permet als usuaris rebin informacions dels locals per on desplacin als seus telèfons inte\l.ligents. Les possibles utilitats poden ser:
Amb aquest projecte es proposa un nou canal de comunicació que permet als usuaris rebin informació dels locals per on desplacin als seus telèfons inte\l.ligents. Les possibles utilitats poden ser:
\begin{itemize}
\item Els restaurants poden enviar menús del dia.
\item Els teatres poden avisar que hi ha unes últimes entrades per vendre de l'espectacle que es farà en poques hores.
......@@ -186,7 +186,7 @@ La figura~\ref{fig:connexions} descriu el procés que es duu a terme des del dis
\item L'emissor envia un identificador únic al receptor mòbil.
\item L'aplicació mòbil el detecta i fa unes peticions consultar al servidor web.
\item El servidor consulta de la base de dades sobre el identificador que ha rebut el receptor.
\item La base de dades retorna les informacions de l'identificador.
\item La base de dades retorna informació donat un identificador.
\item El servidor les retorna al mòbil.
\end{enumerate}
......@@ -786,13 +786,13 @@ Android executa cada aplicació en un \textit{sandbox}. Un \textit{sandbox} és
Si l'aplicació vol utilitzar recursos i informació fora del seu \textit{sandbox}, ha de so\l.licitar permís explícitament \cite{android_permissions}. Hi ha dos tipus de permisos:
\begin{description}
\item [Permisos normals] cobreixen àress en les que l'aplicació necessita accedir a dades o recursos que hi ha molt poc risc per a la privacitat de l'usuari o el funcionament d'altres aplicacions fora de \textit{sandbox}. Per exemple, el permís per establir la zona horària, el permís per canviar fons de pantalla. El sistema concedeix aquests permisos automàticament si una aplicació els demana.
\item [Permisos perillosos] cobreixen àress en les que l'aplicació necessita accedir a dades o recursos que impliquen la informació privada de l'usuari o podrien afectar a les dades emmagatzemades per l'usuari o el funcionament d'altres aplicacions. Per exemple, permís de llegir els contactes de l'usuari. L'usuari concedeix aquests permisos explícitament si una aplicació els demana.
\item [Permisos normals] són aquells relacionats en accedir a dades, recursos que hi ha molt poc risc per a la privacitat de l'usuari. Per exemple, el permís per establir la zona horària o per canviar el fons de pantalla. El sistema concedeix aquests permisos automàticament si una aplicació els demana.
\item [Permisos perillosos] són aquells relacionats en accedir a la informació privada de l'usuari, que podrien afectar a les dades emmagatzemades o el funcionament d'altres aplicacions. Per exemple, permís de llegir els contactes de l'usuari. Aquests permisos els concedeix explícitament l'usuari si una aplicació els requereix.
\end{description}
En el cas de permisos perillosos, es demana concedir permisos en insta\l.lació d'aplicació en la versió 5.1 i inferiors o en el temps d'execució d'aplicació en la versió 6.0 i superiors.
A les versions d'Android anteriors a la 6.0 s'havien d'acceptar o rebutjar tots els permisos durant la insta\l.lació de l'aplicació. A partir de la versió 6.0, els permisos s'escullen en temps d'execució i individualment.
Aquesta aplicació necessita utilitzar Bluetooth per escanejar els emissors BLE, i accés a l'internet per demanar informacions sobre emissor BLE. En el fitxer de manifest es declara els permisos:
Aqueta aplicació necessita utilitzar Bluetooth per escanejar els emissors BLE i accés a internet per demanar informació sobre emissor BLE. En el fitxer de \texttt{manifest} es declaren els permisos:
\begin{verbatim}
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
......@@ -805,9 +805,9 @@ En la versió 6.0, per accedir identificadors dels dispositius externs a través
\end{verbatim}
\subsection{Estructura de dades}
% diferents models: beacon, baeconInfo, beaconDevice... relació
% beaconType realm
En l'aplicació s'ha creat uns objectes abstractes per representar els objectes reals (emissors BLE):
S'han creat els següents models per combrir les necessitats de l'aplicació:
\begin{description}
\item [BeaconType] representa la categoria de l'emissor BLE, té un nom de categoria i el seu id.
\item [BeconDevice] representa la part física de l'emissor BLE, té atributs com, adreça MAC d'emissor, distancia en que es troba amb mòbil, dades de paquet de difusió rebut \dots
......@@ -816,6 +816,63 @@ En l'aplicació s'ha creat uns objectes abstractes per representar els objectes
\item [Beacon] representa un conjunt de informació de l'emissor BLE, té atributs com, BeaconDevice, BeaconInfo i una llista de BeaconNotification.
\end{description}
Per no requerir constantment d'una connexió a internet per comunicar-se amb la API de l'aplicació Android va sorgir la necessitat de desar al disc el contingut d'alguns d'aquests models.
La primera opció que es va plantejar va ser \textbf{SQLite}, un sistema d'administració de base de dades relacional que a diferència d'altres sistemes d'administració de base de dades, no és un motor basat en client-servidor. SQL és un llenguatge conegut i SQLite és un producte madur, amb més de 16 anys. Per altra banda, fa pocs mesos apareix un nou producte: \textbf{Realm}. Realm és un motor de base de dades que es presenta com una alternativa a SQLite per aplicacions mòbils (iOS, Android i Windows Phone). Els principals avantatges són:
\begin{itemize}
\item Amb la definició del model com un objecte de Java, automàticament genera l'estructura de la base de dades.
\item Es defineixen anotacions a la definició del model per indicar quin camp és la clau primària o un índex.
\item Les consultes es realitzen concatenant condicions en forma de funcions amb paràmetres.
\item La càrrega de dades del disc a la memòria és mandrosa.
\item Permet relacionar objectes, ofereix integritat i atomicitat (com la majoria de motors de base de dades).
\item Facilita la sincronització de les dades entre fils de l'aplicació.
\end{itemize}
De manera que per crear un model, tan sols creem una classe de Java (que heredi de RealmObject), definim els atributs i alguna anotació:
\begin{verbatim}
public class BeaconType extends RealmObject {
@PrimaryKey
public long typeId;
public String typeName;
public boolean selected = true;
}
\end{verbatim}
Ja podem començar a afegir objectes del tipus BeaconType a la base de dades. Per crear instàncies, modifcar els valors i fer cerques, es fa de la següent manera:
\begin{verbatim}
// Creem una instància de la base de dades (la primera vegada es construeix al disc)
Realm realm = Realm.getDefaultInstance();
// Comencem una transacció
realm.beginTransaction();
// Creem dos BeaconType (indiquem el tipus de l'objecte i la clau primària)
BeaconType tipus1 = realm.createObject(BeaconType.class, 1);
BeaconType tipus2 = realm.createObject(BeaconType.class, 2);
// Assignem alguns valors
tipus1.typeName = "Restaurants";
tipus2.typeName = "Museus";
// Apliquem els canvis (atòmicament)
realm.commitTransaction();
// Cerquem un BeaconType donat un 'typeId'
BeaconType tipus1_cerca = realm.where(BeaconType.class).equal("typeId", 1).findOne();
// Verifiquem la cerca
if (tipus1.typeId == tipus1_cerca.typeId)
Log.i("I", "Acabem de fer una cerca!"); // => Acabem de fer una cerca!
// Tanquem la instància de realm
realm.close();
\end{verbatim}
\subsection{Serveis web}
% WS, utilitza Volley (Explicació)
% llistar diferents WS
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment