强制下线功能实现是关闭所有活动,回到登录界面。
先展示效果图:
点击off即可回到登录界面。
下面给出逻辑代码。
1.登录界面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/a">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp">
<TextView
android:layout_width="80dp"
android:layout_height="40dp"
android:text="账号"
android:textColor="#000000"
android:textSize="35sp"/>
<EditText
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:hint="请输入账号"
android:id="@+id/et_user"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp">
<TextView
android:layout_width="80dp"
android:layout_height="40dp"
android:text="密码"
android:textColor="#000000"
android:textSize="35sp"/>
<EditText
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:hint="请输入密码"
android:id="@+id/et_password"/>
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:id="@+id/btn_login"
android:text="登录"/>
</LinearLayout>
2.登录的逻辑功能,这里我们规定用户名为admin,密码为12345,否则登录失败
public class loginActivity extends AppCompatActivity{
private EditText tv_user,tv_pass;
private Button btn_login;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_layout);
tv_user=(EditText)findViewById(R.id.et_user);
tv_pass=(EditText)findViewById(R.id.et_password);
btn_login=(Button)findViewById(R.id.btn_login);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String user=tv_user.getText().toString();
String pass=tv_pass.getText().toString();
if(user.equals("admin")&&pass.equals("12345")){
startActivity(new Intent(loginActivity.this,ActivityText.class));
//ActivityText是一个只有一个 button的布局,点击button即可发送广播
}else{
Toast.makeText(loginActivity.this, "账号或密码不正确", Toast.LENGTH_SHORT).show();
}
}
});
}
}
3.广播的发送
public class ActivityText extends BroadCast {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.off_layout);
Button button=(Button)findViewById(R.id.btn_off);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent("com.exaple.loginOff");
sendBroadcast(intent);
}
});
}
}
4.广播接收及强制下线功能实现
强制下线需要关闭所有活动。先写一个实体类用来用来实现关闭活动的功能
public class ActivityCollector {
public static List<Activity> sActivities=new ArrayList<>();
public static void addACtivity(Activity activity){
sActivities.add(activity);
}
public static void removeActivity(Activity activity){
sActivities.remove(activity);
}
public static void finishiAll(){
for(Activity activity:sActivities){
if(!activity.isFinishing()){
activity.finish();
}
}
sActivities.clear();
}
}
接下来就是广播接收和活动关闭。
public class BroadCast extends AppCompatActivity{
@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.exaple.loginOff");
registerReceiver(mBroadcastReceiver,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
//取消广播
@Override
protected void onPause() {
super.onPause();
if(mBroadcastReceiver!=null){
unregisterReceiver(mBroadcastReceiver);
mBroadcastReceiver=null;
}
}
//广播一接收就弹出一个dialog,点击ok按钮跳转到login界面,并且关闭所有活动。
private BroadcastReceiver mBroadcastReceiver=new BroadcastReceiver() {
@Override
public void onReceive(final Context context, Intent intent) {
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setMessage("login off");
builder.setTitle("warning");
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCollector.finishiAll();
startActivity(new Intent(context,loginActivity.class));
}
});
builder.show();
}
};
}
广播的生命周期很短,一般不超过十秒,所以一般不在广播接收时实现太多的功能。