Lanzi tempo fa aveva illustrato la send command nella Shell

La Send Command nella shell ci permette di usare Java da codice inde.
Se come me non conoscete Java c’è sempre chatGPT.
Io avevo il problema che gethttp in un’app offline (lato javascript) non gestisce il timeout.
Così ho deciso di inserirlo in service.java.
Nel mio codice ho chiamato la funzione che ho definito in service.java:

Codice InDe:
`idm.setValue(“url”, Url)idm.setValue(“TIMEOUT”, RicercaOnline.timeout)idm.setValue(“TIMEOUTRD”, RicercaOnline.timeout)
Shell.sendCommand(“MIOGETHTTP”, idm)

In java la firma delle funzioni chiamate da inde è sempre questa
public void MIOGETHTTP(HashMap<String,String> params)
e il corpo della funzione me lo sono fatto scrivere dal mio collaboratore preferito, chatGPT!

E adesso ho il timeout anzi due:

Codice: Seleziona tutto
OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(timeoutn, TimeUnit.SECONDS) .readTimeout(timeoutReadn, TimeUnit.SECONDS) .build();

Se guardate il codice in service.java pote vedere tutte le funzioni del componente Shell.
Per esempio:
private void sendSMS(HashMap<String,String> params)
{
String num = params.get(“NUM”);
String txt = params.get(“TXT”);
//
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(“smsto:” + num));
intent.putExtra(“sms_body”, txt);
intent.putExtra(“compose_mode”, true);
if (Glb.isIntentAvailable(intent))
Glb.theApp.startActivity(intent);
}

Poi se chiedete ad esempio a Gemini di spiegarvelo:
mi spieghi questo codice java android?
private void sendSMS(HashMap<String,String> params)
{
Stringa num = params.get(“NUM”);
Stringa txt = params.get(“TXT”);
//
Intento intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(“smsto:” + num));
intent.putExtra(“sms_body”, txt);
intent.putExtra(“compose_mode”, true);
se (Glb.isIntentAvailable(intento))
Glb.theApp.startActivity(intento);
}

Ripartizione del sendSMS metodo

Questo codice Java definisce un metodo denominato sendSMS che accetta a HashMap<String, String> come input. Questa HashMap contiene probabilmente coppie chiave-valore per specificare il numero di telefono del destinatario e il contenuto del messaggio.

Ecco una spiegazione passo dopo passo:

  1. Estrazione dei parametri:
  • Il metodo estrae innanzitutto il numero di telefono e il testo del messaggio dall’HashMap utilizzando rispettivamente le chiavi “NUM” e “TXT”.
  1. Creare un intento:
  • Un Intent viene creato con l’azione Intent.ACTION_SENDTO e a Uri specificando la destinazione SMS. Il Uri viene costruito utilizzando il numero di telefono estratto.
  • Il putExtra metodo viene utilizzato per aggiungere dati extra all’intento:
    • sms_body : Imposta il corpo del messaggio sul testo estratto.
    • compose_mode : Imposta la modalità di composizione su true , indicando che l’utente dovrebbe essere in grado di modificare il messaggio prima di inviarlo.
  1. Verifica della disponibilità dell’intento:
  • Il Glb.isIntentAvailable(intent) metodo viene utilizzato per verificare se sul dispositivo è presente un’app in grado di gestire l’intento. Questo è importante perché non tutti i dispositivi potrebbero avere un’app SMS predefinita.
  1. Avvio dell’intento:
  • Se è disponibile un’app per gestire l’intento, il Glb.theApp.startActivity(intent) metodo viene chiamato per avviare l’attività associata all’intento. Questo in genere aprirà l’app SMS predefinita con il destinatario specificato e il messaggio precompilato.

Punti chiave:

  • Approccio basato sull’intento: il codice sfrutta il sistema Intent di Android per avviare l’app SMS predefinita.
  • Parametrizzazione: consente HashMap un inserimento flessibile e può essere popolato con diversi numeri di telefono e messaggi.
  • Controllo della disponibilità dell’intento: il codice garantisce che l’intento possa essere gestito prima del suo lancio, prevenendo potenziali errori.
  • Interazione utente: il compose_mode flag consente all’utente di modificare il messaggio prima dell’invio.

Considerazioni potenziali:

  • Autorizzazioni: l’app necessita dell’autorizzazione SEND_SMS per inviare messaggi SMS.
  • Gestione degli errori: valutare l’aggiunta di meccanismi di gestione degli errori per gestire i casi in cui l’intento non può essere avviato o l’SMS non può essere inviato.
  • Approcci alternativi: a seconda del caso d’uso specifico, potresti provare a utilizzare la SmsManager classe per inviare SMS più direttamente, ma ciò richiede più autorizzazioni e potrebbe essere meno intuitivo.

Seguendo questi passaggi e considerazioni, potrai utilizzare efficacemente questo codice per inviare messaggi SMS dalla tua app Android.

Link all’ articolo di Lanzi.

2 Mi Piace