Come avviare un servizio quando .apk viene installato per la prima volta

Nella mia applicazione non ho alcuna parte dell'interface utente, quindi ho bisogno di avviare un servizio non appena l'applicazione viene installata sul dispositivo. Ho visto molti collegamenti da cui la risposta è che non è ansible, ma credo che è sicuramente ansible. Basta guardare l'applicazione PlanB sul Market Android che soddisfa i miei requisiti. Di seguito è il mio file Manifest come ho provato, ma il Servizio non è stato chiamato affatto. Quindi, fammi sapere quale è il modo migliore per avviare un servizio quando l'applicazione viene installata.

AGGIORNARE

  • Stili widget widget personalizzati Android: come inserirli in un namespace?
  • Come creare uno stile inbox (con il count dei conteggi) per android?
  • Qual è l'utilizzo di BaseColumns in Android?
  • Aggiornamento delle versioni di database sqlite?
  • Android - Fornire ANR per scopi di test
  • Come utilizzare rawQuery per inserire un record
  • Ho anche provato a utilizzare android.intent.action.PACKAGE_ADDED funziona bene per rilevare il pacchetto per le altre applicazioni, ma non per se stesso.

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.auto.start" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:icon="@drawable/ic_launcher" > <service android:name=".MyService"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </service> <receiver android:name=".BootUpReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="android.intent.category.DEFAULT"/> <action android:name="android.intent.action.PACKAGE_INSTALL" /> <action android:name="android.intent.action.PACKAGE_ADDED" /> <data android:scheme="package"/> </intent-filter> </receiver> </application> </manifest> 

  • Come passare il doppio valore a una visualizzazione di text in Android
  • Cordova Errore con Cordova-Android 6.2.0 - getFileResources non è una function
  • Come giocare il video come background Android android?
  • Come impostare la data massima nella window di dialogo DataPicker in android?
  • Errore nei casi di commutazione del progetto ZXing in android
  • Viste spaziate uniformsmente utilizzando ConstraintLayout
  • 9 Solutions collect form web for “Come avviare un servizio quando .apk viene installato per la prima volta”

    Fortunatamente, il piano B non funziona su Android 3.1+, come testato su un XOOM e un Galaxy Nexus.

    Quello che pianifica B è sfruttare un buco di sicurezza che potrebbe essere utilizzato da un malware di tipo drive-by, il che è specificamente perché Android impedisce che si verifichi più.


    AGGIORNARE

    Chiarire: come inazaruk ha pubblicato e ho messo in commenti su altre risposte, tutte le applicazioni, all'atto dell'installazione, vengono collocate in uno stato "arrestato". Questo è lo stesso stato in cui l'applicazione si avvia dopo la forza dell'utente – arresta l'applicazione dall'applicazione Impostazioni. Mentre in questo stato "arrestato", l'applicazione non verrà eseguita per alcuna ragione, ad exception di un lancio manuale di un'attività. In particolare, nessun BroadcastReceviers verrà richiamato, indipendentemente dall'evento per il quale sono stati registrati, finché l'utente non esegue manualmente l'applicazione.

    Questo block copre lo scenario di pianificazione B di installazione remota e di esecuzione, che stava approfittando di precedenti. Dopo tutto, con questo, chiunque con un account Google hackato rischierebbe di avere il proprio dispositivo infetto, senza l'uso di mani libere.

    Così, quando l'OP dice:

    Ho bisogno di avviare un servizio non appena l'Applicaton viene installato sul dispositivo

    l'OP non sarà rioutput e dovrà ridisegnare l'applicazione per evitare questo "bisogno" presunto.

    Le applicazioni installate nella partizione / system non sono soggette all'invio nello stato "stop" dopo l'installazione. Se hai una radice, puoi fare,

     $ adb root $ adb remount $ adb push your.apk /system/app 

    E può ricevere immediatamente intenzioni di trasmissione. Questo non fornisce certamente una soluzione per scopi generali, ma volevo menzionarlo per completezza.

    Sono d'accordo con la risposta di CommonsWare alla domanda: Come avviare il servizio android per l'installazione . In altre parole, non è ansible avviare automaticamente il servizio dopo l'installazione.

    Ancora una cosa su piattaforms Android più recenti: se non hai affatto una interface utente, avrai problemi a iniziare il tuo servizio anche quando utilizzi BOOT_COMPLETE intento di BOOT_COMPLETE su Android 3.1+.

    Questo perché tutte le applicazioni installate sono in stato di arresto. In questo stato le applicazioni non riceveranno alcuna notifica di trasmissione.

    Per triggersre l'applicazione, alcune altre applicazioni (o utenti) devono avviare il servizio o l'attività o il provider di contenuti. Il solito stream di lavoro è quando l'utente fa clic sull'icona dell'applicazione.

    Ho scritto una spiegazione dettagliata su questo nel mio post sul blog .

    Il piano B fa questo lancio ascoltando gli events che si verificano nel sistema. Utilizza un ricevitore che letteralmente ascolta centinaia di events sperando che alcuni di loro alla fine si accendano. Così è così che puoi farlo. Altrimenti, non ci sono strumenti incorporati per lanciare l'applicazione non appena viene installata.

    Non sono sicuro di quali sono i tuoi vincoli / scopi, ma se puoi installare un'altra applicazione che ha un'attività puoi inviarla con la bandiera FLAG_INCLUDE_STOPPED_PACKAGES .

    Questo utilizzerà l'applicazione per la risoluzione di intenti, anche se è in stato di arresto. Se l'azione dell'intento corrisponde a uno dei tuoi filtri, questo porterà anche il pacchetto dallo stato fermato.

    Non credo che tu possa iniziare il servizio immediatamente dopo aver installato l'applicazione sul dispositivo,

    L'applicazione deve essere prima richiamata dall'utente tramite una sorta di Activity . Le uniche cose devono registrare un Broadcast Receiver con intenti appropriati nel manifesto che ti invoca il servizio quando qualcosa sta accadendo sul dispositivo ma questo rimane in versione Android 3.1.

    EDIT:

    Dopo l' utilizzo di Android 3.1+ , non è ansible utilizzare alcun Broadcast per avviare l'applicazione, perché tutte le applicazioni rimangono in stato inattivo dopo il completamento dell'avvio del dispositivo e per avviare l'applicazione che l'utente deve ricall (toccando l'icona dell'applicazione).

    Come affermato da CommonsWare nella risposta a questa domanda (che suppongo che tu sia tutto pronto, ma ha scelto di ignorare), non è ansible avviare un servizio per l'installazione: non è semplicemente una cosa che viene implementata nella piattaforma.

    Tuttavia è ansible avviarlo automaticamente all'avvio successivo.

    Come indicato nei dettagli tecnici di PlanB:

    Il piano B tenterà di lanciare non appena viene scaricato, ma in alcuni casi dovrai submit un SMS per iniziarlo.

    La mia ipotesi è che in un telefono radicato potrebbe essere ansible avviare il Service in fase di installazione – ma non c'è garanzia che il telefono sia radicato e per questo motivo PlanB richiederà di ricevere un text in alcuni casi perché può essere registrato da IntentFilter di l'applicazione e quindi utilizzato per avviare il Service .

    Forse il modo migliore per realizzarlo (e adesso sto parlando dell'objective specifico dell'OP, un programma che viene installato per recuperare un telefono rubato, non la domanda generale) è l'ingegneria sociale e non l'ingegneria del software.

    Quindi, un'icona con text come "Password List" o "My Bank Accounts" che improvvisamente apparirà sulla schermata iniziale sarebbe senza dubbio cliccato su. Guarda il successo di tutti i tipi di phishing e qui si punterà a un ladro, che è già stato motivato a continuare un'attività nefasta. Lasciate che il ladro lo inizia per te. 🙂

    c'è un'applicazione su google play Android Lost che invoca il servizio di logging per i messaggi push di google tramite un sms in arrivo senza lanciare l'applicazione anche una volta per la versione 3.0+.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.