尝试使用broadcastReceiver注销

时间:2018-08-19 13:36:32

标签: android broadcastreceiver android-broadcastreceiver

  

我在做什么错了?

活动流程: 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注销,但我没有。 此代码有什么问题。

3 个答案:

答案 0 :(得分:0)

像这样发送广播:

LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

答案 1 :(得分:0)

使用意图标志清除您的活动堆栈,请参阅此以获取更多详细信息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);
}

注意:如果您正在使用共享首选项会话或与用户个人资料相关的本地数据库,也请清除它

答案 2 :(得分:0)

  

我在做什么错了?

您正在混合两种BroadcastReceivers。一个是全球广播,另一个是本地广播。

因此,您将代码更改为:

onClick-> sendBroadcast(intent);
onCreate-> registerReceiver(...);

onClick-> LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
onCreate-> LocalBroadcastManager.getInstance(this).registerReceiver(...);

如果只需要在应用程序内广播事件,则建议对后一个选项进行注释。