Как программно переключаться между лаунчерами Android

У меня есть два лаунчера, Android Launcher и мой пользовательский лаунчер. Мой пользовательский модуль запуска является средством запуска по умолчанию. Когда устройство Android загружается, оно запускает мое приложение. Что я хочу сделать, так это то, что когда пользователь нажимает кнопку в моей панели запуска, я хочу запустить панель запуска Android (поставляется с Android), не прося пользователя выбрать панель запуска. Я хочу сделать это так же, как запуск любого другого приложения.

Возможно ли это с андроидом?


person jsaji    schedule 10.09.2015    source источник


Ответы (2)


К сожалению, это невозможно, если устройство не рутировано, до Android 2.2 был метод, с помощью которого вы могли это сделать, но он больше не доступен.

Но если устройство рутировано или ваше приложение является «системным» приложением (находится в папке /system/apps), вы можете просто отключить другие приложения Launcher при запуске вашего приложения и повторно включить их при выходе вашего приложения, таким образом, ваш пусковая установка становится единственной пусковой установкой в ​​​​системе, поэтому она будет неявно рассматриваться как пусковая установка по умолчанию (но вам нужно обработать кнопку «назад» в вашей активности пусковой установки, кнопка «Домой» будет работать нормально)

person Sharp Edge    schedule 10.09.2015
comment
Если мое приложение является системным приложением, то как я могу запустить средство запуска Android по умолчанию в качестве приложения - person jsaji; 10.09.2015

Вы можете попробовать это

Intent intent=null;
final PackageManager packageManager=getPackageManager();
for(final ResolveInfo resolveInfo:packageManager.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY))
{ 
    if(!getPackageName().equals(resolveInfo.activityInfo.packageName))  
        //if this activity is not in our activity (in other words, it's another default home screen)
    { 
        intent=packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_CLEAR_TASK
            | Intent.FLAG_ACTIVITY_NEW_TASK);
        break; 
    } 
} 
startActivity(intent);
person gmetax    schedule 10.09.2015
comment
Спасибо за быстрый повтор. Я только что попробовал это, но я получаю следующую ошибку. - person jsaji; 10.09.2015
comment
Процесс: me.xxxxx.xxxxx.homescreen, PID: 2474 09-09 23:08:29.788: E/AndroidRuntime(2474): java.lang.NullPointerException: попытка вызвать виртуальный метод 'boolean android.content.Intent.migrateExtraStreamToClipData( )' по ссылке на нулевой объект 09-09 23:08:29.788: E/AndroidRuntime(2474): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1494) - person jsaji; 10.09.2015
comment
попробуйте еще раз, пожалуйста, я обновил свой ответ. Я проверил код, который я разместил, и он работал - person gmetax; 10.09.2015
comment
пожалуйста, найдите код и ошибку gist.github.com/anonymous/258549feb2a1f3eb5574 - person jsaji; 10.09.2015
comment
как я вижу из ошибки, он не нашел другого приложения в качестве лаунчера. Намерение было нулевым, а затем сбой - person gmetax; 10.09.2015
comment
Я запускаю это на эмуляторе Android TV. Перед запуском приложения я убедился, что есть com.google.android.leenbacklauncher, тогда почему он не может запустить этот лаунчер?? - person jsaji; 10.09.2015