9

Moja aplikacja dla systemu Android ma opcję uaktualnienia do nowszej wersji, nowszej wersji pakietu APK, która jest dostępna pod ścieżką na sdcard. Po kliknięciu opcji Uaktualnij, wywołuję następującą metodę.Instalator pakietów Androida - jak uzyskać wyniki "Otwórz" i "Zrobione" oraz wynik działania?

public static void launchInstaller(Activity act, String apkPath) 
    { 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     act.startActivityForResult(intent, 0); 
    } 

Powód to FLAG_ACTIVITY_NEW_TASK, to dlatego, że po upgradation, chcę mieć „otwarte” „Gotowe” opcji, & które nie są wyświetlane, jeśli nie używam tej flagi.

Kiedy powyższy kod uruchomi instalator pakietów, ma dwie opcje OK & Anuluj, gdy użytkownik naciśnie Anuluj, chcę wiedzieć, że użytkownik go anulował. Ale nie jestem w stanie wiedzieć, ponieważ onActivityResult nazywa się przedwcześnie. Dowiedziałem się, dlaczego tak się dzieje po przeczytaniu poniższych postów.

Android - startActivityForResult immediately triggering onActivityResult

onActivityResult() called prematurely

Pytają mnie, aby upewnić się, że zamiar używam do rozpoczęcia działalności nie ma FLAG_ACTIVITY_NEW_TASK ustawić na nim. Zobacz tutaj:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

W szczególności uwaga: „Ta flaga nie może być stosowane, gdy rozmówca jest żądając wynik z działalności rusza”.

Jeżeli działalność jest uruchomiony w ramach nowego zadania następnie Android będą natychmiast wezwać onActivityResult() z RESULT_CANCELED ponieważ działalność w jednym zadaniu nie może powrócić wyników do innego zadania, wyłącznie działalność w tym samym zadanie może to zrobić.

Ale w moim przypadku nie mogę usunąć FLAG_ACTIVITY_NEW_TASK, ponieważ w przeciwnym razie nie otrzymam opcji "Otwarte" i "Gotowe" po pomyślnym uaktualnieniu.

Czy ktoś borykał się z podobnym problemem? Uprzejmie mi pomóż, ponieważ doprowadza mnie to do szału.

+0

Mam ten sam problem ... czy dostałeś jakieś rozdzielczość dla tego? – Himanshu

Odpowiedz

3

Powinieneś użyć dodanego pakietu intencyjnego. Utwórz odbiornik broadcast listen package added. Jeśli dodany pakiet jest równy pakietowi, użytkownik potwierdź instalację, w przeciwnym razie odrzuci proces instalacji. Jeśli zapytasz, jakie dodatki mogą zostać zwrócone przez Androida, Android zwraca EXTRA_UID o pakiecie. Metoda PackManager przekształca uid w pakiet. (GetPackagesForUid (int uid) zwraca tablicę łańcuchów, ale zwykle zwraca jeden element w tablicy w skrócie, zazwyczaj długość tablicy równa się 1.

Powiązane problemy