android - packagemanager - getlongversioncode




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

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

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

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


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

你可以试试这个:

步骤#1:让 LoginActivity 正常使用 LAUNCHER <intent-filter> ,并且 MainActivity 没有 <intent-filter>

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

步骤#3:在 <activity-alias> 上放置 android:enabled="false" ,因此默认情况下禁用它,因此在首次安装应用程序时,唯一的启动器图标用于 LoginActivity

步骤#4:当用户登录并且您想要更改以便 MainActivity 是启动器活动时,使用 PackageManagersetComponentEnabledSetting() 来启用 <activity-alias> 并禁用 LoginActivity

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


您可以将OnCreate之后的Intent添加到您想要在APP开头显示的XML中。

public class LoginActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       //add some code to detect if user is logged in
       if (user != null){
           Intent in = new Intent(LoginActivity.this, YourDesiredActivity.class);
           startActivity(in);
       } 
   ..........
   ...........

最常见的方法是像往常一样制作MainActivity启动器活动。
然后,如果用户已经登录,则通过 SharedPreferences 检查 MainActivity#onCreate(Bundle) ,如果没有, LoginActivity 立即启动 LoginActivity 。 用户登录时,保存布尔标志,指示用户登录 SharedPreferences 并完成 MainActivity


活动不一定需要UI,因此您可以使用清单中的启动器活动来执行您想要的任何活动。





android-applicationinfo