六.App强迫下线的实现

前言

在Android开发过程中,最常见的功能便是“异地登录,强制下线”了。那么,今天就讲讲用广播实现"强迫下线"的功能。

今天涉及的知识有:

  1. 需求场景
  2. 实现"强迫下线"逻辑
  3. "强迫下线"具体实施
  4. 效果图和项目结构图
  5. 其他部分代码及注意事项
    5.1 AppActivity代码
    5.2 进入登录界面逻辑
    5.3 singleTask启动模式
    5.4 singletask接收值注意项

先看下效果图吧


1.gif

一.需求场景

"强迫下线"的表现场景为,当用户的账号在其他设备上登录后,当前设备上无论app处在哪个界面,都要及时弹出"异地登录"的提示框。这种使用场景十分常见,而实现技术难点就在于:无论app处在哪个界面都要弹框。

二. 实现"强迫下线"逻辑

先写一个所有Activity的父类AppActivity,然后重写Activity的 onResume() 方法和 onPause() 方法,然后在 onResume()中注册广播,在onPause()中注销广播,在AppActivity中处理广播接收器,在接收器中弹出dialog实现关闭所有Activity并跳转到登录界面的逻辑。这里需要注意的是,你还要自己写一个类用于管理所有Activity的关闭问题。最后在需要的强制下线的地方,发起弹出强制下线的广播。

三. "强迫下线"具体实施

首先需要一个Activity的父类AppActivity,然后写一个登录界面,我是将登录逻辑写在MainActivity 中,现在贴出MainActivity代码:

public class MainActivity extends AppActivity implements View.OnClickListener{

    private TextView mTv;
    private EditText mEdtName;
    private EditText mEdtPassword;
    private Button mBtn;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initData();
        setListener();
    }

    private void initData() {
        mTv = findViewById(R.id.tv);
        mBtn = findViewById(R.id.btn);
        mEdtName = findViewById(R.id.edit_name);
        mEdtPassword = findViewById(R.id.edit_password);

        mEdtName.setText("小火龙");
    }

    private void setListener() {
        mBtn.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn:
                String password=mEdtPassword.getText().toString();
                if(!"12345".equals(password)){
                    ToastUtil.shortShow("密码错误,请重新登录");
                    return;
                }
                //跳转主页
                Intent intent = new Intent(MainActivity.this, HomeActivity.class);
                startActivity(intent);
                break;
            default:
                break;
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

    }

}

然后跳转到下一界面HomeActivity,下面贴出HomeActivity代码:

public class HomeActivity extends AppActivity implements View.OnClickListener{


    private Button mBtn;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        mBtn = findViewById(R.id.btn);
        mBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn:
                //强迫下线通知
                AppLocalReceiver receiver = new AppLocalReceiver();
                receiver.sendToBroadcast(HomeActivity.this, AppActivity.FORCED_OFFLINE, null);
                break;
            default:
                break;
        }

    }

}

四.效果图和项目结构图

效果图


1.gif

项目结构图


image.png

五.其他部分代码及注意事项

还有 51% 的精彩内容
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
支付 ¥4.00 继续阅读

相关阅读更多精彩内容

友情链接更多精彩内容