7

ustawić moją działalność jako domyślny launcher przechwycić kliknięcia przycisku home tak:Usuń aktywny jako domyślną Launcher

<activity 
    android:name=".ExampleActivity" 
    android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     <category android:name="android.intent.category.HOME" />   
     <category android:name="android.intent.category.DEFAULT" />    
    </intent-filter> 
</activity> 

Kiedy moja aktywność, ExampleActivity jest uruchamiany, jeśli klikam domu klucz, mam monit o wybór. Jeśli wybiorę , ustaw jako domyślną i wybiorę moją aktywność, utknąłem w mojej działalności zgodnie z życzeniem.

Problem polega na tym, że po opuszczeniu aktywności próbuję usunąć moją aktywność z domyślnego programu uruchamiającego, ale nie udało mi się.

Próbowałem:

ComponentName componentName = new ComponentName( 
        "com.example.exampleactivity", 
        "com.example.exampleactivity.class"); 

pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); 

oraz:

PackageManager pm = getActivity().getPackageManager(); 
      ComponentName name = new ComponentName(this, "com.example.exampleactivity.class"); 
      pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); 

Ale moja oznaczenie dla domu nigdy nie jest usuwany.

Czy ktoś ma działający sposób, aby naprawić powyższe?

Tylko nie mam przycisku domyślnego dla konkretnego działania, a nie całej aplikacji. Po opuszczeniu działania powinien zostać usunięty i przywrócony do wartości domyślnej.

+0

Aktualizacja: Wciąż szuka odpowiedzi na to. –

+0

Witaj Mike Mackintosh. Czy masz na to rozwiązanie? Utknąłem z tym samym problemem. – Kaifi

Odpowiedz

1

Nie można zmienić zachowania klawisza domowego, aby pasowało do aplikacji; jest to decyzja projektowa Google, która zapewnia, że ​​użytkownik zawsze może powrócić do statycznej lokalizacji. Mogą istnieć pewne sposoby obejścia tego problemu (jeśli nadal istnieją), ale są to niezamierzone błędy, na które aplikacja nie powinna polegać.

Krótka odpowiedź: możesz mieć dowolny klawisz oprócz klawisza domowego.

+6

Problem nie polega na ustawieniu użycia klucza domowego, ale na późniejszym przywróceniu normalnego użytkowania. Użytkownik jest monitowany o użycie tej czynności jako domyślnej aplikacji uruchamiającej. Jest to zgodne z projektem i pożądane. Nie chcę tego zmieniać. Chcę móc usunąć moją aktywność z programu uruchamiającego po zakończeniu działania i przywrócić domyślne ustawienie programu uruchamiającego. Tutaj leży kwestia. –

+0

To nie jest tak naprawdę, gdzie leży problem ...Problem polega na tym, że Twój projekt nie jest dozwolony przez Androida. Zwykłe aplikacje nie mają możliwości robienia tego, co próbujesz zrobić, ponieważ o ile dobrze ci idzie, to zbyt łatwo jest, aby złośliwa aplikacja powodowała problemy dla użytkownika. Możesz ją ominąć, wyłączając aktywność domową. Zobacz https://groups.google.com/forum/?fromgroups=#!topic/android-developers/dLEAFXONtIA na krótką dyskusję, w której okazuje się, że ktoś chciał dokładnie tego, czego potrzebujesz, a włączenie/wyłączenie pomogło mu. – mah

+1

Jest to całkowicie dozwolone, jeśli zażądamy odpowiednich uprawnień. Nie powinieneś robić tego dla odtwarzacza wideo, ale istnieją uzasadnione powody, aby zarejestrować się jako aplikacja domowa użytkownika. EG aplikacja malucha. – Bostwickenator

1

Sprawdź pozwolenie na android.permission.SET_PREFERRED_APPLICATIONS. Również ta metoda http://developer.android.com/reference/android/content/pm/PackageManager.html#clearPackagePreferredActivities(java.lang.String)

+0

Próbowałem już tego, ale w wersji 4.x to powoduje błąd uprawnień użytkownika bez żadnego obejścia .. –

+0

Możesz się tylko rozbroić. Nie widzę żadnych błędów. Jesteś pewien, że robisz to poprawnie? – Bostwickenator

+0

Prawdopodobnie nie. Dokumentacja i próbki kodu są bardzo rzadkie. Czy masz jakieś przykłady? –

13

jeśli jest to aplikacja, że ​​jesteś wyczyszczenie jego domyślne, można po prostu zadzwonić:

getPackageManager().clearPackagePreferredActivities(getPackageName()); 

następnie, aby wyświetlić okno wyboru, które w użyciu uruchamiania, użytkowania:

final Intent intent=new Intent(); 
intent.setAction(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
startActivity(intent); 
+0

Po to, by uzyskać odpowiedź, przyjąłem koniec świata, aby uzyskać odpowiedź;) Dzięki, spróbuj! –

+0

Jak to się stało? – TacB0sS

+1

Okazuje się, że osoba pytająca nie zadała sobie trudu, aby powrócić na to pytanie, aby potwierdzić wyniki. – Arvin

2

to rozwiązanie jest sprytny sposób to zrobić: Clearing and setting the default home application

Kod w onResume() w zasadzie idzie tak:

ComponentName componentName = new ComponentName(MyActivity.this, FakeHome.class); 
    if (!isMyLauncherDefault()) { 
     Log.e(TAG, "MyActivity is not default home activity!"); 

     // toggle fake activity 
     PackageManager pm = getPackageManager(); 
     int flag = ((pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED 
       : PackageManager.COMPONENT_ENABLED_STATE_ENABLED); 
     pm.setComponentEnabledSetting(componentName, flag, PackageManager.DONT_KILL_APP); 

     // start home activity to enable chooser 
     Intent selector = new Intent(Intent.ACTION_MAIN); 
     selector.addCategory(Intent.CATEGORY_HOME); 
     startActivity(selector); 
    } 

i metoda isMyLauncherDefault() pochodzi stąd: How to check if my application is the default launcher

Powiązane problemy