Android 当应用程序恢复时打开第二个活动

Android 当应用程序恢复时打开第二个活动,android,facebook,Android,Facebook,我正在开发一个应用程序,其中我必须使用android版Fcaebook sdk。我要做的是,当用户成功登录应用程序时,用户将移动到第二个活动。但是,当用户通过按home按钮从第二个活动移动到home,并且当用户再次从设备单击应用程序图标时,第二个活动应该在那里,而不是登录活动。这是我的密码 login.setSessionStatusCallback(new Session.StatusCallback() { @Override public

我正在开发一个应用程序,其中我必须使用android版Fcaebook sdk。我要做的是,当用户成功登录应用程序时,用户将移动到第二个活动。但是,当用户通过按home按钮从第二个活动移动到home,并且当用户再次从设备单击应用程序图标时,第二个活动应该在那里,而不是登录活动。这是我的密码

login.setSessionStatusCallback(new Session.StatusCallback() {

            @Override
            public void call(Session session, SessionState state, Exception exception) {
                // TODO Auto-generated method stub
                if(session.isOpened())
                {
                    Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                        @Override
                        public void onCompleted(GraphUser user, Response response) {
                            String email = user.asMap().get("email").toString();
                            Toast.makeText(getBaseContext(), email + " " + user.getBirthday() , 1000).show();
                            Intent in = new Intent(getBaseContext(), Second.class);
                            in.putExtra("ID", user.getId());
                            startActivity(in);
                            Login.this.finish();
                        }
                    });
                }

            }
        });

当我在第二个活动中按下home按钮后单击应用程序图标时,登录活动从logout按钮开始。但我想在这里开始第二项活动。需要做什么?

如果登录完成,请使用
SharedReference
Boolen LOGGEDIN=true

那么


在LoginActivity的
onResume()中执行操作

@Override
protected void onResume() {

    super.onResume();
    if (session!=null&&session.isOpened()) {
        Request.executeMeRequestAsync(session,new Request.GraphUserCallback() {

                    @Override
                    public void onCompleted(GraphUser user,
                            Response response) {
                        String email = user.asMap().get("email").toString();
                        Toast.makeText(getBaseContext(),
                                email + " " + user.getBirthday(), 1000)
                                .show();
                        Intent in = new Intent(getBaseContext(),
                                Second.class);
                        in.putExtra("ID", user.getId());
                        startActivity(in);
                        Login.this.finish();
                    }
                });
    }
}

您需要将应用程序逻辑与活动分开

即,将用户数据存储在静态变量/单例中,并检查用户是否已初始化和登录。如果是这样,立即开始第二项活动

if (MyGlobalData.user == null) {
  login.setSessionStatusCallback(new Session.StatusCallback() {
  ...
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        MyGlobalData.user = user;
                        String email = user.asMap().get("email").toString();
                        ...
} else {
   user = MyGlobalData.user;
   String email = user.asMap().get("email").toString();
   ...  // start second activity immediately    
}

有一个非常简单和有用的解决方案,可以通过单击应用程序图标返回到关闭(通过主页按钮)活动

从新添加的活动(我们称之为MainActivity)启动应用程序。对于AndroidManifest.xml中设置的活动,android:launchMode=“singleInstance”。在此活动中,启动您想在应用程序中首先运行的活动。在启动finish MainActivity(finish())之后。这就是全部。下面提供了一个例子

<application
        android:name="com.myapp.android"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
    <activity
            android:name="com.myapp.android.MainActivity"
            android:launchMode="singleInstance">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
   <activity android:name="com.myapp.android.LoginActivity"/>

}

@Ketan…它工作得很好。但当我单击应用程序图标启动应用程序时,登录活动将首先打开1秒,然后第二个活动开始…我希望在按下图标时启动第二个活动。当启动应用程序时,如果用户未登录,则LoginActivity将打开,否则第二个活动将选择。不够,由于您在状态回调中有此信息,即使在恢复活动时也是如此。您的答案更模糊-直到你没有给出一个详细的或好的答案
<application
        android:name="com.myapp.android"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
    <activity
            android:name="com.myapp.android.MainActivity"
            android:launchMode="singleInstance">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
   <activity android:name="com.myapp.android.LoginActivity"/>
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent i = new Intent(this, LoginActivity.class);
    startActivity(i);

    finish();
}