加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 总是返回登录界面

发布时间:2020-12-15 02:47:57 所属栏目:Java 来源:网络整理
导读:我有一个应用程序启动Splash活动屏幕5秒然后打开登录活动屏幕然后在您输入正确的用户和密码后打开菜单活动(listActivity)然后每行单击打开MyCity活动. 更新: 我想要得到的是:你在我的应用程序中的任何地方,你出于任何原因离开我的应用程序,不仅是当你按下
我有一个应用程序启动Splash活动屏幕5秒然后打开登录活动屏幕然后在您输入正确的用户和密码后打开菜单活动(listActivity)然后每行单击打开MyCity活动.

更新:

我想要得到的是:你在我的应用程序中的任何地方,你出于任何原因离开我的应用程序,不仅是当你按下主页按钮而且还有FOR EXPLPLES:

>您按主页按钮检查另一个应用程序然后想要返回我的应用程序.
>您有关于whatsup或电子邮件的通知显示新消息,您打开您的whatsup或打开电子邮件,然后返回到我的应用程序.

3-您离开手机一段时间后再想检查我的应用程序.

4-按下电源按钮关闭手机(锁定屏幕),然后打开锁定,想要返回我的应用程序.

我的意思是任何时候你出于任何原因离开我的应用程序,但没有按回退回按钮,这将退出整个应用程序
然后想再次返回我的应用程序必须打开
您登录屏幕再次输入您的用户名和密码.

我叫完();对于Splash活动和登录活动.

我试过:清单中的Login活动中的android:clearTaskOnLaunch =“true”,但它确实没有.

任何建议将被认真考虑,

请写完整的工作代码.

登录活动:

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(); }
            }   }               
                    });  }  }

菜单活动:

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();
                            }
                    }}

MyCity活动:

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)));}


    }}

我的表现:

<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活动,

并阻止菜单活动上的后退按钮行为:

@Override
    public boolean onKeyDown(int keyCode,KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
       moveTaskToBack(true);
       return true;
            }
    return super.onKeyDown(keyCode,event);
                    } }

所以现在按下主页按钮离开我的应用程序然后返回我的应用程序:

直接进入登录活动.

但现在的主要目标是:

如果:

屏幕在您离开手机时锁定,或轻按电源按钮以锁定手机.

要么

通知中打开的消息

要么

打开电子邮件通知

要么

你有CALL并回答它,

然后返回我的应用程序,它不会进入登录活动,但您将返回到您所在的页面.

请提出任何建议,谢谢.

最新消息:

我使用另一个代码覆盖主页按钮并控制后退按钮而不是应用:android:clearTaskOnLaunch =“true”到清单中的Splash活动,只需将下行代码应用于Menu活动:

@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);}

解决方法

Here is the solution I came up with.

请在博客文章末尾下载项目并进行测试.

测试:

>三星S3运行android 4.0.4
>模拟器运行android 2.3.1

基本思路:我们将创建一个RequireLoginActivity,除了LoginActivity之外,我们的所有活动都会扩展它.

调用onResume函数时应捕获三种情况:

>使用startActivity的味道从一个RequireLoginActivity跳转到另一个RequireLoginActivity.
>通过完成当前活动,从一个RequireLoginActivity跳回到之前的RequireLoginActivity.
>隐藏后返回RequireLoginActivity(我们应该在这里显示登录!)

我的解决方案的基本思想是拥有2个计数器:已启动活动的数量(startCounter)和暂停活动的数量(pauseCounter).每次活动开始时我们都会增加startCounter.同样,当活动暂停时,pauseCounter应该递增.在我们的onResume函数中,我们将通过比较2个计数器来决定是否进入登录.如果2个计数器相等,我们将gotoLogin()!

让我解释:
在任何时候,案例1都可以被捕获,因为在开始新活动时,我们的startCounter将始终比pauseCounter更大1.这是真的,因为我们将始终有一个额外的活动已启动但未暂停.

此外,案例3很容易被捕获,因为一旦你离开我们的应用程序,比如说,使用HOME按钮,我们将增加pauseCounter,2个计数器将变得相等.应用程序恢复后,onResume将决定gotoLogin().

案例2有点棘手,但也很简单.诀窍是覆盖finish()函数并将startCounter递减一次,将pauseCounter递减两次.请记住,在完成活动时,会调用onPause并且我们的计数器是相等的.现在通过递减startCounter一次和pauseCounter两次,我们最终返回到前一个活动的计数器值,并且当前一个活动恢复时,startCounter将保持更大的pauseCounter 1.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读