2011-12-14 20 views
7

Potrzebuję wykonać akcję, gdy moja aplikacja jest zainstalowana. Sprawdziłem, czy nie używam intencji w instalowanej aplikacji, ponieważ korzystam z niej. Chcę uruchomić kod, gdy moja aplikacja jest instalowana po raz pierwszy.intent android, gdy moja aplikacja jest zainstalowana

przypadek użycia rejestruje się w usłudze online. mogę wyświetlić BOOT_COMPLETED, co jest dobre, jeśli aplikacja jest już zainstalowana, ale muszę zająć się tą sprawą, gdy użytkownik najpierw zainstaluje aplikację.

ten post, Can you run an intent or script when your app gets installed on Android?

sugeruje słuchania TIMER_TICK i na pierwszej emisji, należy przeprowadzić rejestrację i ustawić flagę, tak aby nie wykonywać go przy następnym TIMER_TICK. wydaje się to problematyczne, ponieważ niezależnie od tego, czy robisz coś w odbiorniku, czy nie, ciągle uruchamiasz odbiornik co minutę i zużywasz baterię w trakcie procesu.

Czy istnieje lepsze rozwiązanie?

Odpowiedz

5

Nie ma niezawodnego zdarzenia, które można złapać. Nawet TIMER_TICK działa tylko pod Androidem 3.1. Od 3.1. dalej nie możesz odbierać transmisji systemowych, dopóki twoja aplikacja nie będzie w stanie aktywnym (co oznacza, że ​​użytkownik musi uruchomić ją co najmniej raz ręcznie).

kontroluje uruchamianie na zatrzymanych aplikacji

Począwszy od Androida 3.1, menedżer pakietów systemu śledzi aplikacji, które są w stanie zatrzymania i dostarcza środków kontroli ich wprowadzenie od procesów w tle i inne aplikacje .

[...]

pamiętać, że system dodaje FLAG_EXCLUDE_STOPPED_PACKAGES wszystkim zamiarów transmisji. Czyni to, aby uniemożliwić transmisję z usług w tle od niezamierzonego lub niepotrzebnego uruchamiania komponentów zatrzymanych aplikacji w postaci . [..]

Aplikacje są w stanie zatrzymania, gdy są one zainstalowane, ale najpierw jeszcze nie rozpoczęła i gdy są one ręcznie zatrzymany przez użytkownika (w Manage Applications).

z 3.1. release notes

polecam zrobić intitial pracy, gdy użytkownik uruchamia aplikację po raz pierwszy.

+0

Myślę, że masz literówkę - czy twoje pierwsze zdanie nie powinno brzmieć "Nie ma żadnego wiarygodnego nawet, że możesz złapać"? – CommonsWare

+0

@CommonsWare Ops, znowu masz rację. Dzięki! :) –

+1

Pamiętaj, że jeśli chcesz wykonać sugestię alextsc dotyczącą wykonania początkowej pracy, gdy użytkownik uruchamia aplikację po raz pierwszy, pojawi się nowa transmisja: [ACTION_PACKAGE_FIRST_LAUNCH] (http://developer.android.com/ reference/android/content/Intent.html # ACTION_PACKAGE_FIRST_LAUNCH). – kabuko

0

Jeśli chcesz założyć, że aplikacja Google Android Market jest zainstalowana, możesz użyć INSTALL_REFERRER. Aby uzyskać więcej informacji, patrz Get referrer after installing app from Android Market.

+0

To nie powinno działać już od wersji Androida 3.1. Nie można odbierać żadnych transmisji, dopóki użytkownik nie uruchomi aplikacji ręcznie po raz pierwszy. – CommonsWare

+0

Ah, nie wiedziałem o tym Commons, dzięki. Czy ta kolejka będzie jakoś transmitowana i zostanie odebrana po uruchomieniu aplikacji? – kabuko

+0

Prawdopodobnie. Nie badałem tego. Ogólnie rzecz biorąc, transmisje nie są kolejkowane, ale rynek może zrobić coś specjalnego dla tego - nie jestem pewien. – CommonsWare

1

Z nowym rynkiem intencja INSTALL_REFERRER jest uruchamiana w momencie premiery systemu Android 3.1 i nowszych wersji. Możemy go otrzymać w naszej aplikacji. Jednak nadal jest uruchamiany przy czasie instalacji 2.2, gdy aplikacja jest w stanie zatrzymania.Więc nie mogę go otrzymać w przypadku Froyo.

Powiązane problemy