W SDK 1.5 Korzystałem z klasy PackageManager, aby ustawić preferowany ekran główny jako moją aplikację przy użyciu PackageManager.addPackageToPreferred(). W nowym SDK (przy użyciu wersji 2.1) jest to przestarzałe, więc próbuję użyć metody addPreferredActivity() dla tego samego wyniku, ale nie działa ona zgodnie z oczekiwaniami.Jak korzystać z PackageManager.addPreferredActivity()?
Niektóre niezbędne tło. Piszę aplikację do wymiany ekranu blokady, więc chcę, aby klucz domowy uruchomił moją aplikację (która będzie już działać, co spowoduje wyłączenie klucza). Kiedy użytkownik "odblokuje" ekran, zamierzam przywrócić mapowanie, aby wszystko działało jak normalnie.
W moim AndroidManifest.xml mam:
<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>
<uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS">
</uses-permission>
W moim kodu mam następujący fragment:
// Set as home activity
// This is done so we can appear to disable the Home key.
PackageManager pm = getPackageManager();
//pm.addPackageToPreferred(getPackageName());
IntentFilter filter = new IntentFilter("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");
ComponentName[] components = new ComponentName[]
{
new ComponentName("com.android.launcher", ".Launcher")
};
Context context = getApplicationContext();
ComponentName component = new ComponentName(context.getPackageName(),
MyApp.class.getName());
pm.clearPackagePreferredActivities("com.android.launcher");
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY,
components, component);
Powstały zachowanie jest, że aplikacja Chooser pojawia się po naciśnięciu Home klucz, który wskazuje, że wywołanie clearPackagePreferredActivities() zadziałało, ale moja aplikacja nie została dodana jako preferowana. Ponadto, pierwsza linia w dzienniku poniżej mówi coś o „upuszczenie preferowaną aktywność na Intencyjny”:
04-06 02: 34: 42,379: INFO/PackageManager (1017): zestaw wyników zmieniło, upuszczając preferowaną aktywność Intent {act = android.intent.action.MAIN cat = [android.intent.category.HOME] flg = 0x10200000} typ null
04-06 02: 34: 42.379: INFO/ActivityManager (1017): Rozpoczęcie działalności Intent {act = android.intent.action.MAIN cat = [android.intent.category.HOME] FLG = 0x10200000 CMP = Android/com.android.internal.app.ResolverActivity}
Do es ktoś wie, co oznacza ten pierwszy komunikat dziennika? Może nie używam API poprawnie, jakieś pomysły? Każda pomoc będzie bardzo ceniona.
Świetne szczegóły na temat pytania. Mam nadzieję, że otrzymasz odpowiedź. Witamy w Stack Overflow. –