android - 如何在 android 中以编程方式配置 Launcher Activity ?

标签 android android-activity android-applicationinfo

我正在开发一个包含两个 Activity 的应用程序:LoginActivityMainActivity。当用户第一次打开应用程序时,他将登录并且他的凭据(用户名和 token )保存在 Preferences 中。

现在,如果用户再次打开应用程序,那么 MainActivity 应该会启动。我尝试在 Application 类中的这些 Activity 之间切换,并从 list 中删除了 LAUNCHER_ACTIVITY 的 Intent 过滤器,但它不起作用。

是否有任何方法可以根据保存的偏好以编程方式在启动器 Activity 之间切换?

最佳答案

Is there any way of switching between Launcher Activities programmatically on basis of saved preferences ?

你可以试试这个:

第 1 步:拥有 LoginActivityLAUNCHER <intent-filter>正常,并拥有 MainActivity没有<intent-filter> .

第 2 步:拥有 an <activity-alias> element in the manifest指向MainActivity具有 LAUNCHER <intent-filter> .

第 3 步:输入 android:enabled="false"<activity-alias> , 所以它默认是禁用的,所以当第一次安装应用程序时,唯一的启动器图标是 LoginActivity .

第 4 步:当用户登录时,您想要更改 MainActivity是启动器 Activity ,使用 PackageManagersetComponentEnabledSetting()制作 <activity-alias>启用和禁用 LoginActivity .

并非所有主屏幕都会即时检测到此更改,对于那些,设备很可能需要重新启动才能获取更改。因此,最好坚持使用单个启动器 Activity 。如果您愿意,该启动器 Activity 可能有 Theme.NoDisplay并简单地路由到 onCreate() 中正确的“真实” Activity ,根据 Fahim 的回答。

关于android - 如何在 android 中以编程方式配置 Launcher Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29517277/

相关文章:

android - 上传 playstore 免费和付费应用程序国家明智

android - 如何在不使用 PackageManager 的情况下阅读 Android Manifest?

android - 为什么生成 LiveData 或 Flow 的函数不必从 CoroutineScope 调用?

android - 如何用 ListPopupWindow 替换我的弹出菜单代码?

android - SDK >=26 仍需要 mipmap/ic_launcher.png?

android - 我如何管理我的 Activity 并正确完成它们?

java - 在Android中制作YesActionBar和NoActionBar主题并在应用程序中使用它们

Android:在模块 jetified-play-services-measurement 和 jetified-play-services-measurement-impl 中发现重复类

android - 如何在 Activity 开始时等待服务

java - 未安装应用程序的应用程序信息