gpt4 book ai didi

java - 始终返回登录屏幕

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:34 27 4
gpt4 key购买 nike

我有一个应用程序通过 Splash activity screen 启动 5 秒然后打开 Login activity screen 然后在输入正确的用户和密码后打开 Menu activity ( listActivity) 然后每行点击打开 MyCity activity

更新:

我想要得到的是:无论您在我的应用程序中的哪个位置,并且出于任何原因离开我的应用程序不仅是在您按下主页按钮时 strong> 还举个例子:

  1. 您按主页按钮查看另一个应用,然后想返回到我的应用。

  2. 您在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com