如何實(shí)現(xiàn)強(qiáng)制下線

如何實(shí)現(xiàn)賬號(hào)強(qiáng)制下線

  • 強(qiáng)制用戶下線這個(gè)功能大家應(yīng)該見(jiàn)過(guò)很多了,到底怎么實(shí)現(xiàn)呢現(xiàn)在我們一起來(lái)做一做
  1. 建立activity的管理類
  public class ActivityCollector
  {
    public static List<Activity> activityList = new ArrayList<>();

    public static void addActivity(Activity activity)
    {
        activityList.add(activity);
    }

    public static void removeActivity(Activity activity)
    {
        activityList.remove(activity);
    }

    public static void finshAllActivity()
    {
        for(Activity activity : activityList)
        {
            if (!activity.isFinishing())
            {
                activity.finish();
            }
        }
    }
}
  1. 建立基本的activity,BaseActivity,所有的Activity都繼承它,在oncreate , onResume,onDestroy添加以下代碼,會(huì)注意到這里注冊(cè)了一個(gè)廣播,之所以要在BaseActivity里面注冊(cè)是是因?yàn)橐院蟮拿總€(gè)Activity都會(huì)繼承BaseActivity,這個(gè)就可以保證每個(gè)界面都可以接收這個(gè)廣播
  public class BaseActivity extends AppCompatActivity
{
    private ForceOffineReceiver forceOffineReceiver;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this);
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.zz.mybreadcast.FORCE_OFFINE");
        forceOffineReceiver = new ForceOffineReceiver();
        registerReceiver(forceOffineReceiver , intentFilter);
    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
        if (forceOffineReceiver != null)
        {
            unregisterReceiver(forceOffineReceiver);
        }
    }
}
  1. 建立一個(gè)登陸的界面,界面很簡(jiǎn)單,界面我就不貼了


    1511504182(1).png
  public class LoginActivity extends BaseActivity
{
    private EditText login_view;
    private EditText password_view;
    private Button login_button;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
        initData();
    }

    private void initView()
    {
        login_view = findViewById(R.id.login_view);
        password_view = findViewById(R.id.password_view);
        login_button = findViewById(R.id.login_button);
    }

    private void initData()
    {
        login_button.setOnClickListener(v ->
        {
            String loginStr = login_view.getText().toString().trim();
            String passwordStr = password_view.getText().toString().trim();
            if(loginStr.equals("admin") && passwordStr.equals("123456"))
            {
                startActivity(new Intent(this , MainActivity.class));
                finish();
            }
            else
            {
                Toast.makeText(LoginActivity.this , "賬號(hào)或者密碼錯(cuò)誤!" , Toast.LENGTH_LONG);
            }
        });
    }


}
  1. 建立廣播,代碼如下
public class ForceOffineReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("提示");
        builder.setCancelable(false);
        builder.setMessage("您的賬號(hào)在另外一臺(tái)手機(jī)已經(jīng)登錄!");
        builder.setPositiveButton("確定" , new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                ActivityCollector.finshAllActivity();
                context.startActivity(new Intent(context , LoginActivity.class));
            }
        });
        builder.show();
    }
}
  1. 最后是MainActivity,這個(gè)類里面只需模仿發(fā)送下線廣播就行
public class MainActivity extends BaseActivity
{
    private Button main_button;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        main_button = findViewById(R.id.main_button);
        // lambda表達(dá)式
        main_button.setOnClickListener(v -> {
            Intent intent = new Intent("com.zz.mybreadcast.FORCE_OFFINE");
            sendBroadcast(intent);
       });
    }
}
  • 別忘記在配置文件里面注冊(cè)哦!
    博客
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容