2013-03-21 4 views
0

Когда пользователь нажимает «Домой», ему предоставляется выбор запуска, и он также может выбрать, устанавливать ли его по умолчанию. Проблема в том, что впоследствии это трудно изменить.Как сбросить замену запуска/замены экрана дома?

Чтобы исправить это я добавил «Reset предпочтительную запуска», который вызывает это:

getPackageManager().clearPackagePreferredActivities(getPackageName()); 

Однако эта линия только сбрасывает предпочтительный пусковой, если он выбрал свою пусковую установку. Мне нужен фрагмент, который очищает предпочтительную пусковую установку, что бы это ни было, поэтому в следующий раз, когда пользователь нажимает на него, ему снова даются параметры.

ответ

11

Это невозможно, и разработчики Android заявили, что не хотят, чтобы приложение меняло настройки пользователя. Тем не менее, существует обходное решение, основанное на том, как Android поддерживает эти настройки.

Сделайте ваш манифест выглядеть следующим образом:

<activity 
     android:name="MyLauncherActivity" 
     android:exported="true" /> 

    <activity-alias 
     android:name="LauncherAlias1" 
     android:targetActivity="MyLauncherActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.HOME" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity-alias> 

    <activity-alias 
     android:name="LauncherAlias2" 
     android:enabled="false" 
     android:targetActivity="MyLauncherActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.HOME" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity-alias> 

Для простоты, я оставил дополнительные атрибуты, которые не относятся к задаче.

Во всяком случае, как только ваш манифест выглядит так, вы можете очистить запуск по умолчанию, используя такой код:

PackageManager pm = getPackageManager(); 
    ComponentName cn1 = new ComponentName("com.mypackage", "com.mypackage.LauncherAlias1"); 
    ComponentName cn2 = new ComponentName("com.mypackage", "com.mypackage.LauncherAlias2"); 
    int dis = PackageManager.COMPONENT_ENABLED_STATE_DISABLED; 
    if(pm.getComponentEnabledSetting(cn1) == dis) dis = 3 - dis; 
    pm.setComponentEnabledSetting(cn1, dis, PackageManager.DONT_KILL_APP); 
    pm.setComponentEnabledSetting(cn2, 3 - dis, PackageManager.DONT_KILL_APP); 

Включив один псевдоним и отключение другого, вы причиняете Android воспринимать параметры пользователя, как поменяв , как если бы вы установили одну пусковую установку и удалили другую. Таким образом, пользователю будет предложено снова выбрать следующий раз, когда они нажимают кнопку «домой». Этот подход работает независимо от того, чья пусковая установка является текущим дефолтом.

+0

Я понимаю, разработчики Android не желающих приложение изменять пользовательские настройки, но отсутствие центрального места для управления предпочитаемые приложения просто смешно – lisovaccaro

+0

я скорее согласен, но короткие укоренения устройства нет ничего не поделаешь Это. –

+0

Я сделал больше тестов (добавил белый фон к теме), и тема работает, поскольку я вижу белый фон, однако анимации нет (активность просто исчезает и исчезает). Я понятия не имею, почему это происходит – lisovaccaro

1

Действия с псевдонимом вызовут некоторые проблемы, такие как ваша пусковая установка, предоставит две записи при сборке пусковой установки по умолчанию.

следующее мое решение, оно работает для меня. how to make the Launcher-Pick-Up popup window showing?

+0

Это удивительно работает для меня !! –