Italian Come simulare smartphone con sim ?

amorosik

Expert
Licensed User
Vorrei realizzare un'app per Android del tipo usata per le vendite a domicilio delle pizze e simili
Un pc in ufficio dialoga con un certo numero di smartphone inviando sms
Gli smartphone comunicano col sistema centrale in ufficio cpllegandosi via socket tcp con un serverino scritto ad hoc
Il problema sta nel collaudo del sistema, nel senso che avrei bisogno di simulare un ambiente quanto piu' possibile vicino al reale, composto da pc centrale e diciamo 30 telefoni, giusto per dare un'idea
le domande sono:
- e' possibile avviare su un pc piu' di un'isrtanza emulatore Android ?
- come fare per inviare degli sms agli emulatori ?
 

Sagenut

Expert
Licensed User
Longtime User
Con gli emulatori gestiti da AVD Manager di B4A (o da Android Studio, insomma quelli di Google) è possibile avviare più emulatori.
Però devono essere tutte macchine diverse, nel senso che non puoi creare un emulatore ed avviarlo N volte.
Questo è un warning che dà AVD Manager di B4A dicendo che avviare più volte la stessa macchina è una cosa sperimentale e si può fare modificando un valore, ma io non ho provato.
Non ho nemmeno provato se è possibile creare N volte lo stesso emulatore, in modo da averlo più volte in lista, e poi avviarne una istanza di ognuno.
Negli emulatori trovi la funzione per simulare l'SMS.
N.B. = gli emulatori secondo me funzionano abbastanza bene a patto di avere un processore Intel con la Virtualizzazione Hardware (VT-X) attivata nel Bios.
 

Sagenut

Expert
Licensed User
Longtime User
Ho provato per curiosità.
Non è possibile creare N volte lo stesso emulatore direttamente con B4A perchè assegna sempre lo stesso nome agli AVD seguendo la versione Android scelta in quel momento.
Per aggirare il limite bisogna:
- creare l'AVD di nostro interesse
- andare nella cartella dell'SDK Android dove si trova la cartella B4AEmulator
- cambiare nome alla cartella dell'emulatore (e copiare/ricordare tale nuovo nome)
- andare in C:\Utenti\xxxxxx\.android\avd dove si trovano i file .INI dei vari emulatori
- rinominare il file .INI del nostro emulatore con lo stesso nome usato prima
- modificare il valore PATH all'interno del file .INI con lo stesso nome usato prima
Far ripartire il B4A AVD Manager per digerire la modifica e poi ricominciare tutto il processo creando un altro emulatore con la stessa versione di Android di quello precedente
Ovviamente questo è per poter creare N volte un emulatore con la stessa versione di Android.
Se ne crei uno con Android 10, uno con Android 9, uno con Android 8 allora lo puoi fare direttamente senza impazzire.
 

amorosik

Expert
Licensed User
Indicazioni preziose
Molte grazie
Ma per l'invio sms all'emulatore dici che non c'e' modo da esterno?
Perche' se devo simulare l'invio a qualche decina di emulatori divento matto
 

marcick

Well-Known Member
Licensed User
Longtime User
Un pc in ufficio dialoga con un certo numero di smartphone inviando sms

Gli SMS devono solo essere letti dall'utente o essere intercettati da relativa app Android che tu sviluppi ?
Se si, hai presente che dovrai scriverti una interfaccia di gestione degli SMS che deve sostituire quella stock ?
E che se vorrai portare l'app anche per IOS questo non potrai farlo ?
 

amorosik

Expert
Licensed User
Gli sms vengono intercettati da mia app
Sono dei comandi che la consolle in ufficio invia ai telefoni per far loro eseguire delle operazioni
Per iOS attualmente non e' importante possa funzionare, non ne e' previsto l'utilizzo
Volevo capire se gli sms all'emulatore (o agli emulatori) sia possibile inviarli da programma esterno, per automatizzare l'attivita'
 

LucaMs

Expert
Licensed User
Longtime User
Ma ce la fa un pc a far girare 30 emulatori???

Secondo me molti ma molti meno.

Non ho capito, poi, perché il pc in ufficio dovrebbe comunicare con gli smartphone tramite sms mentre, viceversa, questi dovrebbero usare un "serverino"; tutto col server è vietato?
 

amorosik

Expert
Licensed User
Siete voi gli espertoni
Ce la si fa con 30 simulatori?
Per 'serverino' non intendevo l'hardware ma il software che accetta le richieste di comunicazione in arrivo dai telefoni
In realta' su un pc gira sia l'interfaccia grafica che la parte di storage permanente che il server tcp per le comunicazioni
 

amorosik

Expert
Licensed User
Allora, timorato dai timori dei piu' esperti, ho provato con una decina di emulatori
E funzionicchia, otgnuno si porta via circa 200-300 Mbyte di ram, a vanno
E quindi l'obiettivo dei trenta emulatori credo sia raggiungibile a patto di dedicar loro una decina di Gbyte di ram
Resta la difficolta' di sparare i comandi via essemmesse senza usare il metodo 'a manina'
Se devo dargli di copia-incolla sul pannellino di ogni emulatore, divento nonno prima di finire il progetto
Quindi, serve assolutissimamente un metodo per comandare 'sti benedetti emulatori Android, sparando loro le istruzioni per ottenere l'effetto 'ricezione sms'
In questo senso, un'idea, uno spunto, sarebbe particolarmente apprezzato
Ciao
 

marcick

Well-Known Member
Licensed User
Longtime User
Guarda, non si tratta di essere espertoni, termine che meno mi si addice.
Cannavacciuolo quando spiega le sue ricette dice che se parti con la base giusta, anche una semplice salsina, sopra ci costruisci quello che vuoi.
Ti abbiamo osservato in due se è il caso di impostare il discorso con gli SMS perché potresti incontrare molte difficoltà e non lo hai nemmeno considerato.
Forse se ci ragioni un attimo e cambi strategia capisci che non ti serve mettere in piedi 30 emulatori per testare il tuo sistema.
 

LucaMs

Expert
Licensed User
Longtime User
Last edited:

amorosik

Expert
Licensed User
Guarda, non si tratta di essere espertoni, termine che meno mi si addice.
...
Forse se ci ragioni un attimo e cambi strategia capisci che non ti serve mettere in piedi 30 emulatori per testare il tuo sistema.

Era un termine amichevol- scherzoso, mi scuso se ho dato l'impressione di voler dare un significato diverso
Per quanto riguarda il numero di emulatori, non vedo come sia possibile testare il sistema di comunicazione "pc ufficio-telefoni" senza avere a disposizione un discreto numero di telefoni oppure in alternativa lo stesso numero di emulatori
Se tu vedi un sistema alternativo ti inviterei a descriverlo
 

amorosik

Expert
Licensed User
Si, cer
Nemmeno io intendevo server hw; ti domandavo perché non far comunicare tra loro sia il PC centrale che i dispositivi tramite questo server sw.
Uno dei tanti metodi pratici potrebbe essere MQTT.
https://www.b4x.com/android/forum/threads/iot-mqtt-protocol.59471/#content

Si, certo, qualsiasi metodo alternativo agli sms/socket e' ben accetto
In questo caso l'utilizzo del protocollo mqtt non e' stato finora preso in considerazione per due motivi:
1 - non lo conoscevo
2 - necessita di un 'pezzo' esterno (il server mqtt)
Per la prima provedero' prima possibile, per la seconda che voi sappiate e' disponibile un server mqtt da attivare in casa?
Che tu sappia, la comunicazione via mqtt che tempi prevede?
Voglio dire, da quando premi il pulsante invio comando su pc ufficio, a quando vedi reagire l'app sul telefono, quanto tempo passa?
Sono decimi di secondo, qualche decina di secondi, o non ben determinato?
Perche' ho fatto qualche prova con le notifiche push usando pushover.net ma ho visto che la comunicazione non e' proprio istantanea, parliamo nella media dei casi di secondi o decine di secondi, e ridurre questo tempo in questo progetto ha una grande importanza
 

udg

Expert
Licensed User
Longtime User
MQTT: puoi scaricare liberamente ed installare mosquitto (è uno dei tanti broker disponibili). Attenzione che richiede la presenza di un certificato SSL (let's encrypt va bene).
Nei miei test i tempi erano più che soddisfacenti. Il vero problema è che se l'app sul cellulare non è attiva (foreground) nel momento in cui viene inviato il messaggio MQTT, rischia di perderlo (anche se lato broker si attivano le opportune opzioni). Ciò non accade con FCM che recapita messaggi anche a telefono spento (nel senso che arrivano appena riaccendi, ovviamente).
L'utilizzo dei due (MQTT e FCM) è molto simile; client e server si iscrivono a canali (topic) ed in pratica restano in ascolto, sollevando un evento quando arriva un messaggio.
 

marcick

Well-Known Member
Licensed User
Longtime User
Era un termine amichevol- scherzoso, mi scuso se ...

Tranquillo.
Le notifiche Firebase sono pressochè istantanee. Il problema sono le tecniche di risparmio energetico (doze mode) implementate sempre più incisivamente nei dispositivi più moderni, che fanno si che tu possa riceverle anche con decine di secondi di ritardo se il dispositivo non è in uso (standby) da qualche minuto. In teoria vedrai che ci sono delle indicazioni per escludere una app dal risparmio energetico, in pratica non funzionano.
Lato Apple, non voglio dire che sono più bravi, ma pare questo problema non ci sia.
Con gli SMS probabilmente riusciresti ad essere più puntuale, ma a mio avviso è un sistema davvero troppo vecchio per impostarci un nuovo progetto. Poi ti devi costruire il gestore SMS (non è una banalità, va fatto bene perchè poi l'utente lo deve potere usare per mandare e ricevere i suoi SMS personali). Poi non potrai fare lo stesso discorso su Apple (impossibile gestire SMS) e pregiudicare da subito la portabilità della tua app nel mondo Apple mi sembra un vero peccato.
Se è una applicazione business puoi anche pensare di noleggiare un server cloud (es 13 euro al mese con Aruba) scrivi un server B4J e lavori con i WebSocket. Ci sono dei metodi per tenere il dispositivo sempre sveglio e in ascolto, uno spunto lo puoi trovare qui. Ma lato Apple va visto bene, non so dirti. E comunque alcuni dispositivi potrebbero non comportarsi come desideri.
Il padrone è sempre Android e il costruttore nel come lo ha implementato. Se decidono che una tua app o servizio in background debba essere segato per motivi di memoria/batteria, viene segata e basta. Zitto e muto.
Alla fine, accettando qualche compromesso e sperando che gli utenti utilizzino il telefono per non farlo entrare nel doze-mode, credo che la strada delle notifiche sia quella più semplice e valida da perseguire.
I miei due cents.
 

amorosik

Expert
Licensed User
Il problema sono le tecniche di risparmio energetico (doze mode) implementate sempre più incisivamente
..
In teoria vedrai che ci sono delle indicazioni per escludere una app dal risparmio energetico, in pratica non funzionano.

Dal link sembra di capire che inviando delle notifiche ad 'alta priorita' il programma, anche se telefono in dozen mode, debba risvegliarsi e rispondere alla notifica
Da quello che scrivi, sembra tu abbia gia' provato e verificato che questa cosa NON funzioni
E' cosi ?
 

Sagenut

Expert
Licensed User
Longtime User
Tralasciando l'utilità o meno della cosa, la domanda sul come inviare SMS ad un emulatore tramite vie esterne mi aveva incuriosito.
Puoi inviare gli SMS agli emulatori tramite ADB, quindi dovrai farti un bello script per gestire diversi emulatori in un colpo solo.
Per inviare un SMS ad un emulatore il comando è questo:
adb -s emulator-5554 emu sms send 3331234567 Voglio una Pizza al Salame Piccante
Nel caso si avesse un solo emulatore basterebbe:
adb emu sms send 3331234567 Voglio una Pizza al Salame Piccante
Ma nel tuo caso dovrai rilevare tutti i nomi degli emulatori (come emulator-5554) per creare lo script.
 

udg

Expert
Licensed User
Longtime User
Definire "più che soddisfacenti" please
Nei miei test, in genere, 1 secondo; a volte due, ma mai di più (altrimenti avrei sclerato perchè sono pur sempre della scuola "premi un tasto e qualcosa avviene immediatamente"; se devo aspettare, allora vado di carta e matita, che almeno sono più sicuro..eheh).
 

marcick

Well-Known Member
Licensed User
Longtime User
Dal link sembra di capire che inviando delle notifiche ad 'alta priorita' il programma, anche se telefono in dozen mode, debba risvegliarsi e rispondere alla notifica
Da quello che scrivi, sembra tu abbia gia' provato e verificato che questa cosa NON funzioni
E' cosi ?

già .... io non ci avevo combinato niente, ma non considerarmi l'esperto che non sono. Fai anche tu qualche esperimento, magari scopri qualcosa di utile.
se cerchi "Android notification delayed" trovi tonnellate di post sull'argomento ma pare non se ne esca.
Quello che sembra vero è che alcune app popolari possano avere accordi con i produttori per essere inserite in una sorta di WhiteList.
 
Top