我有一个应用程序通过 Splash activity screen
启动 5 秒然后打开 Login activity screen
然后在输入正确的用户和密码后打开 Menu activity ( listActivity)
然后每行点击打开 MyCity activity
。
更新:
我想要得到的是:无论您在我的应用程序中的哪个位置,并且出于任何原因离开我的应用程序不仅是在您按下主页按钮时 strong> 还举个例子:
您按主页按钮查看另一个应用,然后想返回到我的应用。
您在 whatsup 或电子邮件上收到显示新消息的通知,您打开 whatsup 或打开电子邮件,然后返回到我的应用。
3- 您离开手机一段时间后想再次查看我的应用。
4- 您按电源按钮关闭手机(锁定屏幕),然后打开锁并想返回我的应用程序。
我的意思是任何时候你出于任何原因离开我的应用程序但没有按 back back back back 按钮将退出整个应用程序 然后想再次返回我的应用程序必须打开 您登录屏幕再次输入您的用户名和密码。
我为 Splash Activity 和登录 Activity 调用了 finish();
。
我在 list 的登录 Activity 中尝试了:android:clearTaskOnLaunch="true"
,但没有成功。
任何建议将不胜感激,
请编写完整的工作代码。
登录 Activity :
public class Login extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
Button b = (Button) findViewById(R.id.loginbutton);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EditText username = (EditText) findViewById(R.id.login);
EditText password = (EditText) findViewById(R.id.password);
if(username.getText().toString().length() > 0 && password.getText().
toString().length() > 0 ) {
if(username.getText().toString().equals("test") && password.getText().
toString().equals("test")) {
Intent intent = new Intent(Login.this, Menu.class);
startActivity(intent);
finish(); }
} }
}); } }
菜单 Activity :
public class Menu extends ListActivity {
String classes[] = { "City1", "City2", "City3", "City4", "City5"};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(Menu.this,
android.R.layout.simple_list_item_1, classes));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
String cheese = classes[position];
try {
Class ourClass = Class.forName("com.test.demo.MyCity");
Intent ourIntent = new Intent(Menu.this, ourClass);
ourIntent.putExtra("cheese", cheese);
startActivity(ourIntent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}}
我的城市 Activity :
public class MyCity extends Activity {
TextView tv1;
String city;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.city);
initializeTextViews();}
private void initializeTextViews() {
tv1=(TextView)findViewById(R.id.city_tv);
city=getIntent().getStringExtra("cheese");
if(city.equalsIgnoreCase("City1")){
tv1.setText(Html.fromHtml(getString(R.string.city1)));}
else if(city.equalsIgnoreCase("City2")){
tv1.setText(Html.fromHtml(getString(R.string.city2)));}
else if(city.equalsIgnoreCase("City3")){
tv1.setText(Html.fromHtml(getString(R.string.city3)));}
else if(city.equalsIgnoreCase("City4")){
tv1.setText(Html.fromHtml(getString(R.string.city4)));}
else if(city.equalsIgnoreCase("City5")){
tv1.setText(Html.fromHtml(getString(R.string.city5)));}
}}
我的 list :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.demo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".Splash"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Login"
android:label="@string/app_name"
android:clearTaskOnLaunch="true">
<intent-filter>
<action android:name="com.test.demo.LOGIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".Menu"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.test.demo.MENU" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".MyCity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.test.demo.MYCITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
第二次更新:我达到了我想要的一半,但仍有一些步骤我无法实现,解释如下:
通过将 android:clearTaskOnLaunch="true"
应用于 Splash Activity ,
并防止菜单 Activity 上的后退按钮行为:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
} }
现在当按下主页按钮离开我的应用程序然后返回到我的应用程序时:
直接转到登录 Activity 。
但现在的主要目标是:
如果:
屏幕锁定当您离开手机时,或轻按电源按钮锁定手机。
或
OPENED MESSAGE 来自通知
或
OPENED EMAIL 来自通知
或
你有CALL并接听,
然后返回到我的应用它不会进入登录 Activity 但您将返回到您之前所在的页面。
任何建议,谢谢。
THIED 更新:
我使用另一个代码来覆盖主页按钮并控制后退按钮而不是应用:android:clearTaskOnLaunch="true"
到 list 中的 Splash Activity ,只需将向下代码应用到菜单 Activity :
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;}
else if (keyCode == KeyEvent.KEYCODE_HOME) {
Intent i=new Intent(Menu.this,Login.class);
startActivity(i);
finish();
return true;}
return super.onKeyDown(keyCode, event);}
最佳答案
如果我理解正确,您的目标是用户在返回您的应用程序时必须再次输入用户名和密码。所以我认为实现这一点最合乎逻辑的方法是在所有 Activity onResume()
方法中添加一个检查,以查看您是否有用户名和密码,如果没有,只需转到登录 Activity .最简单的方法是让一个 BaseActivity 实现检查并让您的所有其他 Activity (spash 和登录除外)继承自该 BaseActivity。
伪 java 代码
class BaseActivity extends Activity {
onResume() {
super.onResume();
if (!havingUsernameAndPassword()) {
startActivity(loginActivity);
finish();
}
}
}
class AnyOfYourActivitiesExceptSpashAndLogin extends BaseActivity {
onResume() {
super.onResume();
// ... further code
}
// ... further code
}
havingUsernameAndPassword()
的实现当然取决于您如何在登录 Activity 中存储用户名和密码。一种非常简单的方法是将它们存储在一些静态类成员中,这样只要应用程序运行它们就会存在。
更新:一个更具体的例子
我制作了一个新示例,还展示了如何在登录时保存登录数据以便稍后进行检查。实际上,只有一个标志“loggedIn”和一些用户 ID 会更有意义,但这取决于您的实现,所以我会在这里坚持使用用户名/密码。
class SimpleDataHolder {
public static String username = null;
public static String password = null;
}
class LoginActivity extends Activity {
// ...
// when user has entered valid username/password, store them in SimpleDataHolder:
SimpleDataHolder.username = username; // <-- store username entered
SimpleDataHolder.password = password; // <-- store password entered
}
class BaseActivity extends Activity {
onResume() {
super.onResume();
if (SimpleDataHolder.username == null || SimpleDataHolder.password == null) {
startActivity(loginActivity); // <-- go to login
finish(); // <-- end current activity
}
}
}
class AnyOfYourActivitiesExceptSpashAndLogin extends BaseActivity {
// ... your existing code (if any)
onResume() {
super.onResume(); // <-- this calls BaseActivity.onResume() which checks username/password
// ... your existing code (if any)
}
关于java - 始终返回登录屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12868396/