如何在android中以编程方式配置Launcher活动?

aru*_*uke 18 android android-activity android-applicationinfo

我正在开发一个有两个活动的应用程序:LoginActivityMainActivity.当用户首次打开应用程序时,他将登录并保存其凭据(用户名和令牌)Preferences.

现在,如果用户再次打开应用程序,则MainActivity应该启动.我试图在Application类中切换这些活动,并从manifest中删除了LAUNCHER_ACTIVITY的intent-filter,但它不起作用.

是否有任何方法可以根据保存的首选项以编程方式在Launcher活动之间切换?

Com*_*are 23

是否有任何方法可以根据保存的首选项以编程方式在Launcher活动之间切换?

你可以试试这个:

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

步骤2:在清单中一个<activity-alias>元素指向MainActivity那个有LAUNCHER <intent-filter>.

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

第4步:当用户登录时,你想改变这样MainActivity的发射活动,使用PackageManagersetComponentEnabledSetting()使<activity-alias>能和禁用LoginActivity.

并非所有主屏幕都会动态检测到这种变化,对于那些设备,设备需要重启才有可能获得更改.因此,坚持使用单个启动器活动会更好.如果你愿意,根据法希姆的回答,该启动器活动可以Theme.NoDisplay并且只是简单地路由到正确的"真实"活动onCreate().

  • 你每天学习新的东西.好小费. (5认同)

Kno*_*sos 15

长话短说,你无法改变Activity默认启动的那个.更新:CommonsWare在另一个答案中有另一种选择.

但是,有合理的工作.在你的MainActivity,你可以检查用户是否登录,并立即将其重定向到LoginActivity.这具有MainActivity在您登录后自动返回的额外好处.

或者,您可以始终首先访问LoginActivity,如果用户已经登录,则将它们发送给MainActivity(重写Intent历史记录以删除返回LoginActivity或在清单中设置noHistory标志).