java – 总是返回登录界面

我有一个应用程序启动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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?
Java菜单驱动程序以检查数字类型
使用Junit的Maven项目 - 检查银行账号
JAVA编程基础
在Java中使用throw、catch和instanceof来处理异常
在Java中,将数组分割为基于给定查询的子数组后,找到子数组的最大子数组和
如何在Java中从给定的字符串中删除HTML标签?
在PHP中,IntlChar getBlockCode()函数的翻译如下:
如何在Android中实现按下返回键再次退出的功能?
如何使用Java中的流式API解析JSON字符串?
Java中的模式类