msf*_*ein 53 android android-manifest
我正在编写一个应用程序,要求您在使用之前登录服务.根据我对android到目前为止的理解,你必须选择从清单中的启动器打开时要启动的活动.我不知道我想在编译时启动哪个活动.我希望用户单击该图标,然后检查并查看他们是否已登录,然后根据是否启动登录活动或主应用程序活动来决定.有没有办法做到这一点?
Ric*_*mil 64
不,因为你必须运行一些代码,所以没有办法以声明的方式(在清单中)说出来.您必须启动一个活动(在清单中设置),然后让此活动根据用户是否登录而决定,或者不是通过Intent启动的第二个活动:
final Class<? extends Activity> activityClass;
if(userIsLoggedOn())
activityClass = LoggedOnActivity.class;
else
activityClass = LogInActivity.class;
Intent newActivity = new Intent(context, activityClass);
context.startActivity(newActivity);
Run Code Online (Sandbox Code Playgroud)
使用activity-alias还有另一种方法可以做到这一点.
在清单中:
<activity
android:name=".LoginActivity"
android:icon="@drawable/ic_launcher_main"
android:label="Login" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:icon="@drawable/ic_launcher_main"
android:label="MainActivity" >
</activity>
<activity-alias
android:name=".AliasActivity"
android:label="AliasActivity"
android:enabled="false"
android:targetActivity=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
Run Code Online (Sandbox Code Playgroud)
2.登录活动中的某个地方:
String s = getApplicationContext().getPackageName();
ComponentName cm = new ComponentName(s, s+".AliasActivity");
ComponentName cm2 = new ComponentName(s, s+".Login");
PackageManager pm = this.getPackageManager();
pm.setComponentEnabledSetting(cm, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 1);
pm.setComponentEnabledSetting(cm2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
Run Code Online (Sandbox Code Playgroud)之后,应用程序将被杀死一次,下次启动应用程序时,MainActivity将成为启动器.
归档时间: |
|
查看次数: |
14516 次 |
最近记录: |