2013-11-26 7 views
14

Utilizzando adb shell o un emulatore di terminale sul dispositivo, inserendo questo cancellare tutte le notifiche (richiede su)Dove trovare informazioni sul comando di shell "chiamata di servizio" di Android?

service call notification 1 

Questo invierà uno sms (non richiede su)

service call isms 5 s16 "PhoneNumber" i32 0 i32 0 s16 "BodyText" 

Dove può Ulteriori informazioni su service call? Ho trovato this question e apprezzo la ripartizione della risposta su cosa significa tutto. Ma dove posso trovare informazioni su quale metodo potrebbe provare a chiamare il metodo notification 2?

Esecuzione service call era incompleto e stampate questo uso:

Usage: service [-h|-?] 
     service list 
     service check SERVICE 
     service call SERVICE CODE [i32 INT | s16 STR] ... 
Options: 
    i32: Write the integer INT into the send parcel. 
    s16: Write the UTF-16 string STR into the send parcel. 

mi sono imbattuto service list ed è tornato con 78 servizi per il mio dispositivo, inclusi isms e notification e per la maggior parte dei servizi stamperà quello che sembra essere uno spazio dei nomi (com.android.internal.telephony.ISms per isms e android.app.INotificationManager per notification). Come posso usare queste informazioni per scoprire cosa posso fare con ciascuno di questi servizi?

+0

anche chiesto a http://android.stackexchange.com/q/57778/1302 –

+0

Sì, da me. Non ero sicuro di quale community sarebbe meglio in grado di rispondere alla mia domanda. Penso che entrambe le comunità potrebbero trarne beneficio. –

risposta

7

La mia prima risposta qui spero quindi sarà utile per voi.

Per spiegare questo piccolo indovinello permettimi di utilizzare Android 4.3.1. Il collegamento This potrebbe essere essenziale nel tuo caso. Scorri verso il basso il codice java fino alla linea 669. Ti aspettiamo blocco TRANSACTION strettamente correlato al servizio com.android.internal.telephony.ISms e probabilmente la tua risposta su cosa puoi fare di più.

Nel tuo caso stai invocando TRANSACTION_sendText. La spiegazione è nella riga 673 in cui è possibile trovare

static final int TRANSACTION_sendText = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4); 

L'ultima parte del codice è costituita da cifre "4". Ogni numero di TRANSAZIONE + 1 = quello corretto. Questo è il motivo per cui service call isms 5 è responsabile per sendText e non per sendMultipartText.

La stessa regola si applica a tutti i servizi.

Sono sicuro che ora scopri come controllare le TRANSAZIONI per il servizio di notifica. Buon divertimento.

+1

Il file java a cui è collegato non fa parte dell'albero del codice sorgente ufficiale. Viene generato dal file AIDL: https://android.googlesource.com/platform/frameworks/base/+/android-4.3.1_r1/telephony/java/com/android/internal/telephony/ISms.aidl. Trovo più facile analizzare anche –

+0

@AlexP Manca il punto: le informazioni che devi fare sono * in * il file compilato. Il file AIDL di origine non ha affatto i numeri di transazione, dal momento che vengono generati al momento della compilazione. –

+0

@GlennMaynard, non mi manca niente.Sono più che capace di contare le righe in un file di testo da solo - questa è l'intera estensione della parte rilevante (per trovare il numero di transazione) del processo di compilazione AIDL. –

9

Ecco il mio post su Calling Android services from ADB shell. Include un piccolo script bash che utilizzo per scaricare automaticamente la versione corretta del codice sorgente del servizio per il mio dispositivo specifico e quindi analizzarlo per trovare i codici transazione per tutti i metodi.

+1

Questa è davvero la risposta! Peccato che mi ci siano voluti 2 anni per trovare la tua sceneggiatura! Affinché gli altri sappiano, ogni chiamata di servizio è dipendente da AOS/API in larga misura, più basso è il numero di chiamata più è probabile che sia compatibile con tutte le versioni AOS. Per numeri più alti, ad esempio 'telefono di chiamata di servizio 87 i32 0 i32 1' (per impostare la rete in modo che utilizzi solo GSM 2G) molto probabilmente non funzionerà su tutti gli altri dispositivi rispetto a quello previsto. – not2qubit

Problemi correlati