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