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

Прошло много времени с тех пор, как я пытался понять, как разработать приложение для разблокировки экрана Android, работающее с аутентификацией NFC. Я работаю с Nexus S. После нескольких исследований в Интернете я пришел к выводу, что замена экрана блокировки в качестве стороннего приложения сейчас просто не поддерживается и что нам нужно изменить платформу, чтобы сделать достойную реализацию.

Именно по этой причине я разработал приложение для домашнего экрана, которое создает иллюзию приложения для разблокировки экрана. Но моя проблема в том, что я хотел бы перенаправить на лаучер по умолчанию в конце процедуры.

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

Intent goHome = new Intent();
i.setAction("android.intent.action.MAIN");
i.addCategory("android.intent.category.HOME");
startActivity(goHome);

Итак, я попытался использовать приведенный ниже код, но, похоже, он не работает.

Intent goHome = new Intent(Intent.ACTION_MAIN);
goHome.setClassName("com.android.launcher", "com.android.launcher.Launcher");
startActivity(goHome);

Я получаю следующий logCat

Не удалось найти явный класс активности ( com.android.launcher.laucher )

У вас есть идеи, почему это не работает? Это правильный способ сделать это?


person Saralou    schedule 20.03.2012    source источник


Ответы (3)


попробуй это :

goHome.setClassName("com.android.launcher", "com.android.launcher2.Launcher");
person Ethan Liou    schedule 20.03.2012
comment
@ethan_liou я получаю сообщение об ошибке 05-11 10:38:26.300: E/AndroidRuntime(6728): НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main 05-11 10:38:26.300: E/AndroidRuntime(6728): Процесс: com.example.lockapplication, PID : 6728 05-11 10:38:26.300: E/AndroidRuntime(6728): android.content.ActivityNotFoundException: невозможно найти явный класс активности {com.android.launcher/com.android.launcher2.Launcher}; Вы объявили эту активность в своем AndroidManifest.xml? - person Erum; 11.05.2015

Использовать:

    PackageManager pm = getPackageManager();
    Intent i = new Intent("android.intent.action.MAIN");
    i.addCategory("android.intent.category.HOME");
    List<ResolveInfo> lst = pm.queryIntentActivities(i, 0);
    if (lst != null) {
       for (ResolveInfo resolveInfo : lst) {
           try {
           Intent home = new Intent("android.intent.action.MAIN");
           home.addCategory("android.intent.category.HOME");
           home.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
           startActivity(home);
           break;
           } catch (Throwable t) {
               t.printStackTrace();
           }
       }
    }
person user1135940    schedule 10.05.2013
comment
Я не уверен, почему за это не проголосовали раньше, но это единственное решение, которое работает для меня. Спасибо тебе @user1135940! - person Bruce; 02.12.2013

Если у вас есть устройство Samsung, у меня сработал следующий код:

Intent goHome = new Intent(Intent.ACTION_MAIN);
        goHome.setClassName("com.sec.android.app.launcher", "com.android.launcher2.Launcher");
        startActivity(goHome);
person Martin    schedule 14.02.2013