как сделать так, чтобы всплывающее окно Launcher-Pick-Up отображалось?

У меня установлено приложение Launcher. И пользователь выбрал другую программу запуска по умолчанию, это означает, что при нажатии HOME программа запуска по умолчанию появится на переднем плане.

Я хочу предоставить пользователю возможность сброса пусковой установки по умолчанию. Например, нажатие кнопки в пользовательском интерфейсе моей программы запуска приведет к отображению всплывающего окна Launcher-Pick-Up.

Go Launcher может это сделать (в настройках Go). кажется, Go Launcher делает что-то вроде «PackageManager.clearPackagePreferredActivities («com.android.launcher»)», чтобы очистить предпочтительную активность запуска!

как этого добиться?


person RoFF    schedule 09.12.2013    source источник


Ответы (1)


лаунчер может очистить только свои предпочтительные настройки из-за проблем с безопасностью.

вот обходной путь:

зарегистрируйте активность макета в Manifest.xml:

   <activity
        android:name="MockupLauncher"
        android:enabled="false" 
        android:exported="false" 
        android:excludeFromRecents="true" 
        android:launchMode="singleTask" >

        <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>

используйте «PackageManager.setComponentEnabledSetting», чтобы активировать ОС для очистки текущей предпочтительной программы запуска:

    private void resetPreferedLauncher() {

       PackageManager pm = mContext.getPackageManager();
       ComponentName mockupComponent = new  ComponentName(MockupLauncher.class.getPackage().getName(), MockupLauncher.class.getName());

       pm.setComponentEnabledSetting(mockupComponent,  PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

      Intent startMain = new Intent(Intent.ACTION_MAIN);
      startMain.addCategory(Intent.CATEGORY_HOME);
      startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      mContext.startActivity(startMain);

      pm.setComponentEnabledSetting(mockupComponent,  PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
      // or
      //pm.setComponentEnabledSetting(mockupComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
   }

я так делаю! Наслаждайтесь!

person RoFF    schedule 10.12.2013
comment
Почему это работает для вас. В манифесте перечислены два системных разрешения в качестве требований. - person timemanx; 19.01.2014