2011-05-06 11 views
20

Non sono soddisfatto dei programmi di blocco app per Android che ho trovato e vorrei creare da soli, ma non riesco a capire come implementare il blocco effettivo. Come si fa a implementare un armadietto delle app per Android?Come implementare un armadietto dell'app in Android?

Ci sono due questioni:

  1. rilevare un Intent, di solito dal lanciatore chiamando startActivity() o da un annuncio lanciare l'applicazione di mercato (non sto parlando di intenti di trasmissione - ho bisogno di gestire gli Intenti di attività espliciti).

    • Le autorizzazioni per le applicazioni spogliatoi ho visto tutti hanno "leggere i file di log di sistema" e/o "recuperare le applicazioni in esecuzione", che suggerisce che potrebbero usare il polling per cercare lanci app. Penso che potrei fare questo, ma mi piacerebbe trovare una soluzione migliore, se possibile.
  2. Prevenire l'applicazione bloccata dall'elaborazione dell'Intent. Preferirei non consentire l'esecuzione dell'applicazione bloccata finché non viene immesso il codice di accesso poiché è impossibile stabilire cosa potrebbe comportare all'avvio.

    • Quando si esegue il mio attuale gavone app, logcat mostra "ActivityManager: l'attività di partenza" prima con l'intento per l'applicazione bloccata, poi di nuovo con l'intento per l'armadietto app, con niente in mezzo (separati da 10-20ms). Se inserisco il codice di accesso corretto, vedo "ActivityManager: moveTaskToBack".
    • Ho sperimentato un'app di prova che dimostra che, utilizzando il mio attuale armadietto dell'app, nessuno dei callback di Activity viene richiamato se l'app è bloccata e non inserisco il passcode corretto. Sembra quindi impedire l'avvio dell'app (ma non so come).
    • Potrei usare ActivityManager.killBackgroundProcesses() per interrompere un'app, ma non ho alcuna garanzia che l'app non sia già stata avviata quando viene "uccisa".
    • Potrei essere in grado di utilizzare PackageManager.setApplicationEnabledSetting() per impedire un'istanza di un'istanza, ma non penso che si occuperà delle app che sono già in esecuzione (che non dovrebbero essere consentite per elaborare nuovi Intenti o vieni in primo piano). Potrei essere in grado di utilizzare killBackgroundProcesses() per interrompere tutti i processi bloccati in modo che debbano essere riattivati. Ma questo approccio non mi piace perché altre app potrebbero interferire con le impostazioni abilitate e sconfiggere il blocco.
    • In modo ottimale, il sistema inviava ogni Intent alla mia app per ispezione e mi permette di fermarlo o lasciarlo passare, ma sono abbastanza sicuro che non è possibile (almeno, non per intenti espliciti per avviare attività da un launcher).

Qualcuno sa come applicazioni gavone app vengono attuate, o avete qualunque idee brillanti su come si potrebbe fare?

+5

Le tecniche utilizzate da "armadietti app" sono buchi di sicurezza. Sto cercando di farli chiudere. – CommonsWare

+0

Come nascondere i lanciatori delle attività nascoste insieme al meccanismo di blocco del livello di intenti? – aProgrammer

+0

@CommonsWare qualche riferimento nell'app degli armadietti delle app? – nida

risposta

Problemi correlati