Jak założyć serwis kiedy.apk jest instalowany po raz pierwszy

W mojej aplikacji nie mam żadnej części interfejsu użytkownika, więc muszę uruchomić usługę, jak tylko aplikacja zostanie zainstalowana na urządzeniu. Widziałem wiele linków, z których odpowiedź była taka, że nie jest to możliwe, ale myślę, że jest to z pewnością możliwe. Wystarczy spojrzeć na PlanB aplikację na Android Market, która spełnia moje wymagania. Poniżej znajduje się mój plik Manifest, jak próbowałem, ale usługa nie została wywołana w ogóle. Daj mi więc znać, jaki jest najlepszy możliwy sposób na uruchomienie usługi, gdy Aplikacja zostanie zainstalowana.

UPDATE

Próbowałem również użyć {[1] } działa dobrze do wykrywania pakietu dla innych aplikacji, ale nie dla siebie.

<?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>
Author: Lalit Poptani, 2011-12-16

10 answers

[1]} Na szczęście Plan B nie działa na Androidzie 3.1+, jak testowano na Xoom i Galaxy Nexus.

Plan B wykorzystuje lukę bezpieczeństwa, która może być używana przez złośliwe oprogramowanie typu drive-by, dlatego właśnie Android uniemożliwia jej działanie.


UPDATE

Dla wyjaśnienia: jak napisał inazaruk I dodałem w komentarzach inne odpowiedzi, wszystkie aplikacje, po instalacji, są umieszczone w stanie" stopped". Jest to ten sam stan, że wniosek kończy się po wymuszeniu przez użytkownika-zatrzymuje aplikację z aplikacji Ustawienia. W tym stanie" stopped " aplikacja nie będzie uruchamiana z żadnego powodu, z wyjątkiem ręcznego uruchamiania aktywności. W szczególności, żadne BroadcastReceviers nie będzie wywoływane, niezależnie od zdarzenia, dla którego zostały zarejestrowane, dopóki użytkownik nie uruchomi aplikacji Ręcznie.

Ten blok obejmuje scenariusz Planu B zdalnej instalacji i uruchomienia, z którego korzystali wcześniej. W końcu każdy z zhakowanym Google konto byłoby zagrożone zainfekowaniem urządzenia, bez użycia rąk.

Więc, gdy OP mówi:

Muszę uruchomić usługę, jak tylko aplikacja zostanie zainstalowana na urządzeniu

Operacja zakończy się niepowodzeniem i będzie musiała przeprojektować aplikację, aby uniknąć tej rzekomej "potrzeby".

 78
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-17 12:24:27

Aplikacje zainstalowane na partycji / systemowej nie mogą być umieszczane w stanie" stopped " po instalacji. Jeśli masz roota, możesz to zrobić,

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

I może natychmiast odbierać intencje transmisji. To z pewnością nie zapewnia rozwiązania ogólnego przeznaczenia, ale chciałem wspomnieć o nim dla kompletności.

 16
Author: Jeffrey Blattman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-05 20:22:23

Zgadzam się z odpowiedzią CommonsWare na pytanie: Jak uruchomić usługę android przy instalacji . Innymi słowy, nie można automatycznie uruchomić usługi po zainstalowaniu.

Jeszcze jedno o nowszych platformach Android: jeśli w ogóle nie masz UI, będziesz miał problemy z uruchomieniem usługi nawet przy użyciu BOOT_COMPLETE intent na Androidzie 3.1+.

To dlatego, że wszystkie zainstalowane aplikacje są w stanie stopped. W tym stanie aplikacje nie otrzymają Wszelkie powiadomienia o transmisji.

Aby aktywować Twoją aplikację, inna aplikacja (lub użytkownik) musi uruchomić twoją usługę, aktywność lub dostawcę treści. Zwykle odbywa się to wtedy, gdy użytkownik kliknie ikonę aplikacji.

Napisałem szczegółowe wyjaśnienia na ten temat w moim blogu .

 14
Author: inazaruk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-17 01:04:51

Plan B uruchamia się, słuchając zdarzeń, które dzieją się w systemie. Wykorzystuje odbiornik, który dosłownie nasłuchuje setek zdarzeń, mając nadzieję, że niektóre z nich w końcu się odpalą. Więc tak możesz to zrobić. W przeciwnym razie nie ma wbudowanych środków do uruchomienia aplikacji, gdy tylko zostanie zainstalowana.

 5
Author: Malcolm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-16 10:05:16

Nie jestem pewien, jakie są Twoje ograniczenia/cel, ale jeśli możesz zainstalować inną aplikację, która ma aktywność, możesz wysłać intencję z flagą FLAG_INCLUDE_STOPPED_PACKAGES .

To użyje Twojej aplikacji do rozdzielczości intencyjnej, nawet jeśli jest ona w stanie zatrzymanym. Jeśli akcja intencji pasuje do jednego z Twoich filtrów, spowoduje to również wyprowadzenie pakietu ze stanu zatrzymanego.

 5
Author: Xiao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-29 20:57:45

Nie wydaje mi się, aby można było uruchomić usługę od razu po zainstalowaniu aplikacji na urządzeniu,

Aplikacja musi być najpierw wywołana przez Użytkownika za pomocą pewnego rodzaju Activity.Jedyne rzeczy, które musisz zarejestrować Broadcast Receiver z odpowiednimi intencjami w manifeście, które wywołują usługę, gdy coś dzieje się na urządzeniu, ale to remaing do wersji Android 3.1.

EDIT:

Po Android 3.1 + nie można używać żadnego Broadcast dla uruchomienie aplikacji, ponieważ cała aplikacja pozostaje w stanie nieaktywnym po zakończeniu rozruchu urządzenia i aby ją uruchomić, użytkownik musi ją wywołać.(Dotykając ikony aplikacji).

 3
Author: user370305,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-20 16:46:54

Jak stwierdził CommonsWare w odpowiedź na to pytanie (co przypuszczam, że wszyscy już widzieliście, ale zdecydowaliście się zignorować) uruchomienie usługi przy instalacji nie jest możliwe - po prostu nie jest to rzecz zaimplementowana do platformy.

Automatyczne uruchamianie przy następnym uruchomieniu jest jednak możliwe.

Zgodnie ze szczegółami technicznymi dla PlanB:

Plan B spróbuje uruchomić się zaraz po pobraniu, ale w niektórych przypadkach trzeba będzie wysłać SMS, aby zacząć.

Zgaduję, że na zrootowanym telefonie może być w stanie uruchomić Service podczas instalacji - ale nie ma gwarancji, że telefon jest zrootowany, dlatego PlanB będzie wymagał odczytu tekstu w niektórych przypadkach, ponieważ może być zarejestrowany przez IntentFilter aplikacji, a następnie używany do uruchomienia Service.

 1
Author: kaspermoerch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:46

Istnieje aplikacja w google play Android Lost, które wywołują usługę rejestracji dla wiadomości push Google za pomocą przychodzącego sms-a bez uruchamiania aplikacji nawet raz dla wersji 3.0+.

 1
Author: test,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-25 08:45:32

Być może najlepszym sposobem, aby to osiągnąć (a teraz mówię do konkretnej intencji OP, programu, który jest instalowany w celu odzyskania skradzionego telefonu, a nie ogólne Pytanie) jest inżynieria społeczna, a nie Inżynieria oprogramowania.

Tak więc, ikona z tekstem, takim jak " lista haseł "lub" moje konta bankowe", która nagle pojawiła się na ekranie głównym, bez wątpienia zostanie kliknięta. Spójrz na sukces wszelkiego rodzaju innych phishingów, a tutaj celowałbyś w złodzieja, który jest już zmotywowany do kontynuowania nikczemnej działalności. Niech złodziej zacznie za Ciebie. :)

 1
Author: Anders8,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-31 20:49:00

Hej myślę, że za pomocą BroadcastRecivier, aby automatycznie uruchomić aplikację przy ponownym uruchomieniu urządzenia, więc automatycznie rozpocznie się przy starcie urządzenia.Mam nadzieję, że to pomoże

 -5
Author: Indian Tech Guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 18:32:02