我创建了我跨越几个应用程序共享库项目。 我实现了一个简单的会话过期功能一定时间后会踢用户返回到登录屏幕。
登录屏幕上的活动是我的主要活动,所以在清单中,它看起来是这样的:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock.Light.DarkActionBar"
android:name="com.blah.application.MyApplication" >
<activity
android:name="com.blah.activity.LoginScreenActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
当会话过期,我想踢用户返回到登录界面,但我不想硬编码活动的名称,因为它可能取决于所使用的库的具体应用有所不同。 这就是我一直在做之前:
Intent intent = new Intent(context, LoginScreenActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
如果应用程序的主要活动是东西比LoginScreenActivity不同,这是行不通的。 我不想硬编码“LoginScreenActivity.class”,我想以编程方式确定主类的名称,然后将用户引导到该活动......有人可以帮我吗?
提前致谢!
编辑
我找到了一种方法来完成相同的最终结果,但它绝对不是很大。 由于存在一定量的配置我有必要使用相同的库(字符串,布尔变量等)部署新的应用程序,我添加一个字符串的strings.xml文件中定义的“主”活动名称的具体应用该应用程序:
<string name="mainClassName">com.blah.specificapp.activity.SpecificAppLoginScreenActivity</string>
然后,我可以通过名字得到该类手柄和重定向用户有:
Class<?> clazz = null;
try
{
clazz = Class.forName(context.getString(R.string.mainClassName));
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if(clazz != null)
{
Intent intent = new Intent(context, clazz);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
}
我知道这是一个神可怕的解决方案,但它的工作原理。 就像我说的,有配置一定量的,我为每个新的应用程序做,无论如何,所以再添加一个字符串是不是一个巨大的交易,它只是不是很优雅。 谢谢你让我可以完成同样的目标,而无需使用我的劈任何建议。