java - 设置启动器而不离开当前 Activity

标签 java android android-intent

当我的主屏幕从默认值中清除时,我可以发送此 Intent 来触发“启动器选择器对话框”,我可以在其中选择默认的启动器。

        Intent i = new Intent(Intent.ACTION_MAIN);
        i.addCategory(Intent.CATEGORY_HOME);
        i.addCategory(Intent.CATEGORY_DEFAULT);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivityForResult(i, 1);

问题是,当用户选择启动器时,我当前的 Activity 将被带回,并且新的启动器出现在前台。

我尝试通过以下方式启动 Intent 作为选择器:

startActivity(Intent.createChooser(i, "Choose one"));

但这行不通。

有没有办法在设置新启动器时保持我当前的 Activity 可见?

最佳答案

好吧,Nova Launcher 使用这个(我认为)。这是他们的 HomeReset 类。

public class HomeReset
  extends Activity
{
  public static ComponentName D(PackageManager paramPackageManager)
  {
    ComponentName localComponentName = null;
    try
    {
      Intent localIntent = new Intent("android.intent.action.MAIN", null);
      localIntent.addCategory("android.intent.category.HOME");
      localIntent.addFlags(270532608);
      localComponentName = localIntent.resolveActivity(paramPackageManager);
      if (("android".equals(localComponentName.getPackageName())) && ("com.android.internal.app.ResolverActivity".equals(localComponentName.getClassName()))) {
        return null;
      }
      return localComponentName;
    }
    catch (Exception localException)
    {
      Log.e("HomeReseter", "Exception when trying to find default home", localException);
    }
    return localComponentName;
  }

  public static Intent D()
  {
    Intent localIntent = new Intent("android.intent.action.MAIN", null);
    localIntent.addCategory("android.intent.category.HOME");
    localIntent.addFlags(270532608);
    return localIntent;
  }

  public static void D(Activity paramActivity)
  {
    PackageManager localPackageManager = paramActivity.getPackageManager();
    localPackageManager.setComponentEnabledSetting(new ComponentName(paramActivity.getPackageName(), "com.teslacoilsw.launcher.homereset.HomeReset"), 1, 1);
    Intent localIntent = new Intent("android.intent.action.MAIN", null);
    localIntent.addCategory("android.intent.category.HOME");
    localIntent.addFlags(270532608);
    localIntent.addFlags(268435456);
    localIntent.putExtra("homereset_return_to_settings", true);
    paramActivity.startActivity(localIntent);
    localPackageManager.setComponentEnabledSetting(new ComponentName(paramActivity.getPackageName(), "com.teslacoilsw.launcher.homereset.HomeReset"), 2, 1);
    paramActivity.startActivity(localIntent);
  }

  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    Context localContext = getApplicationContext();
    PackageManager localPackageManager = getPackageManager();
    localPackageManager.setComponentEnabledSetting(new ComponentName(localContext.getPackageName(), "com.teslacoilsw.launcher.homereset.HomeReset"), 1, 1);
    Intent localIntent1 = new Intent("android.intent.action.MAIN", null);
    localIntent1.addCategory("android.intent.category.HOME");
    localIntent1.addFlags(270532608);
    localIntent1.setFlags(268435456);
    localContext.startActivity(localIntent1);
    localPackageManager.setComponentEnabledSetting(new ComponentName(localContext.getPackageName(), "com.teslacoilsw.launcher.homereset.HomeReset"), 2, 1);
    Intent localIntent2 = new Intent("android.intent.action.MAIN", null);
    localIntent2.addCategory("android.intent.category.HOME");
    localIntent2.addFlags(270532608);
    localIntent2.setFlags(402653184);
    localContext.startActivity(localIntent2);
  }
}

这有帮助吗?我找不到它的 R.Java 文件,因为它被混淆了,所以我无法告诉您 ID 引用。

编辑:我认为这就是上述 Activity 的启动方式。这是来自他们的SettingsActivity:

...
      Preference localPreference = findPreference("select_home");
      if (localPreference == null) {
        return;
      }
      Object localObject = null;
      PackageManager localPackageManager = getActivity().getPackageManager();
      ComponentName localComponentName = HomeReset.D(localPackageManager);
      if (localComponentName != null) {}
      try
      {
        localObject = localPackageManager.getActivityInfo(localComponentName, 0).loadLabel(localPackageManager);
      }
      catch
...

关于java - 设置启动器而不离开当前 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22388434/

相关文章:

java - 在 JBOSS 应用程序服务器下运行的 Java 应用程序中的数据库连接池

android - 如何为按钮添加模糊的阴影?

java - 如何不同时处理 View.onClick() 和处理 View.onLongClick()?

java - NavigationDrawer onCreate 空 Activity

java - 如何以正确的顺序获取 stdout 和 stderr 打印

java - 使用groovy对java类进行单元测试

android - 什么是 START_STICKY、START_NOT_STICKY 和 START_REDELIVER_INTENT 服务

java - 如何比较两个 Intent 是否相等

java - 当设备处于锁定状态且屏幕处于关闭状态时,如何运行我的应用程序?

java - 比较 Selenium 中的两个字符串