如何實現賬號強制下線
- 強制用戶下線這個功能大家應該見過很多了,到底怎么實現呢現在我們一起來做一做
- 建立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();
}
}
}
}
- 建立基本的activity,BaseActivity,所有的Activity都繼承它,在oncreate , onResume,onDestroy添加以下代碼,會注意到這里注冊了一個廣播,之所以要在BaseActivity里面注冊是是因為以后的每個Activity都會繼承BaseActivity,這個就可以保證每個界面都可以接收這個廣播
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);
}
}
}
-
建立一個登陸的界面,界面很簡單,界面我就不貼了
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 , "賬號或者密碼錯誤!" , Toast.LENGTH_LONG);
}
});
}
}
- 建立廣播,代碼如下
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("您的賬號在另外一臺手機已經登錄!");
builder.setPositiveButton("確定" , new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which)
{
ActivityCollector.finshAllActivity();
context.startActivity(new Intent(context , LoginActivity.class));
}
});
builder.show();
}
}
- 最后是MainActivity,這個類里面只需模仿發送下線廣播就行
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表達式
main_button.setOnClickListener(v -> {
Intent intent = new Intent("com.zz.mybreadcast.FORCE_OFFINE");
sendBroadcast(intent);
});
}
}
- 別忘記在配置文件里面注冊哦!
博客