尝试使用 broadcastReceiver 注销
Trying to Logout using broadcastReceiver
What am I doing Wrong?
Activity 流程:
HomeActivity
--> SettingActivity
--> ProfileActivity
在 ProfileActivity
中我有 LogOut
按钮。 OnClick
注销我正在做...
public void onLogout()
{
//do this on logout button click
Intent intent = new Intent();
intent.setAction("com.package.ACTION_LOGOUT");
this.sendBroadcast(intent);
}
并且在 SettingsActivity
onCreate
我正在这样做...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.package.ACTION_LOGOUT");
LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("onReceive","Logout in progress");
//At this point we should start the login activity and finish this one.
Intent gotoLogin = new Intent(SettingsActivity.this,Login_Activity.class);
startActivity(gotoLogin);
finish();
}
}, intentFilter);
}
我以为我会从 ProfileActivity
注销,但我没有。
这段代码有什么问题。
像这样发送广播:
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
使用意图标志清除您的 activity 堆栈,请参阅此处了解更多详情 https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK
所以你需要像下面那样实现你的 onLogout() 方法,你就可以开始了
public void onLogout() {
//do this on logout button click
Intent logoutUser = new Intent(context, Login_Activity.class);
logoutUser.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(logoutUser);
}
注意:如果您正在使用与用户配置文件相关的共享首选项会话或本地数据库,请同时清除其中任何一个
What am I doing Wrong?
您混合了两种 BroadcastReceivers
。一个是全局广播,一个是本地广播。
因此,您将代码更改为:
onClick -> sendBroadcast(intent);
onCreate-> registerReceiver(...);
或
onClick -> LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
onCreate -> LocalBroadcastManager.getInstance(this).registerReceiver(...);
如果您只需要在您的应用程序内广播事件,则推荐使用后一种选项。
What am I doing Wrong?
Activity 流程:
HomeActivity
--> SettingActivity
--> ProfileActivity
在 ProfileActivity
中我有 LogOut
按钮。 OnClick
注销我正在做...
public void onLogout()
{
//do this on logout button click
Intent intent = new Intent();
intent.setAction("com.package.ACTION_LOGOUT");
this.sendBroadcast(intent);
}
并且在 SettingsActivity
onCreate
我正在这样做...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.package.ACTION_LOGOUT");
LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("onReceive","Logout in progress");
//At this point we should start the login activity and finish this one.
Intent gotoLogin = new Intent(SettingsActivity.this,Login_Activity.class);
startActivity(gotoLogin);
finish();
}
}, intentFilter);
}
我以为我会从 ProfileActivity
注销,但我没有。
这段代码有什么问题。
像这样发送广播:
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
使用意图标志清除您的 activity 堆栈,请参阅此处了解更多详情 https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK
所以你需要像下面那样实现你的 onLogout() 方法,你就可以开始了
public void onLogout() {
//do this on logout button click
Intent logoutUser = new Intent(context, Login_Activity.class);
logoutUser.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(logoutUser);
}
注意:如果您正在使用与用户配置文件相关的共享首选项会话或本地数据库,请同时清除其中任何一个
What am I doing Wrong?
您混合了两种 BroadcastReceivers
。一个是全局广播,一个是本地广播。
因此,您将代码更改为:
onClick -> sendBroadcast(intent);
onCreate-> registerReceiver(...);
或
onClick -> LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
onCreate -> LocalBroadcastManager.getInstance(this).registerReceiver(...);
如果您只需要在您的应用程序内广播事件,则推荐使用后一种选项。