[Android新手学习笔记32]-Broadcast-强制下线

来源:互联网 发布:php去掉所有html标签 编辑:程序博客网 时间:2024/06/14 09:21

点击发送强制下线按钮,弹出确定框,点击确定跳到登录界面。

创建用于操作活动的类ActivityCollector:

  1. public class ActivityCollector {
  2.    public static List<Activity> activities = new ArrayList<>();
  3.    public static void addActivity(Activity activity) {
  4.        activities.add(activity);
  5.    }
  6.    public static void removeActivity(Activity activity) {
  7.        activities.remove(activity);
  8.    }
  9.    public static void finishAll() {
  10.        for (Activity activity : activities) {
  11.            if (!activity.isFinishing()) {
  12.                activity.finish();
  13.            }
  14.        }
  15.    }
  16. }

创建基础活动类BaseActivity继承AppCompatActivity,这样不用在每个活动中实现弹出警告框,接收广播:

  1. public class BaseActivity extends AppCompatActivity {
  2.    private ForceOfflineReceiver forceOfflineReceiver;
  3.    @Override
  4.    protected void onCreate(@Nullable Bundle savedInstanceState) {
  5.        super.onCreate(savedInstanceState);
  6.        ActivityCollector.addActivity(this);
  7.    }
  8.    @Override
  9.    protected void onResume() {
  10.        super.onResume();
  11.        IntentFilter intentFilter = new IntentFilter();
  12.        intentFilter.addAction("top.xiexiaodong.broadcast.FORCE_OFFLINE");
  13.        forceOfflineReceiver = new ForceOfflineReceiver();
  14.        registerReceiver(forceOfflineReceiver, intentFilter);
  15.    }
  16.    @Override
  17.    protected void onPause() {
  18.        super.onPause();
  19.        if (forceOfflineReceiver != null) {
  20.            unregisterReceiver(forceOfflineReceiver);
  21.            forceOfflineReceiver = null;
  22.        }
  23.    }
  24.    @Override
  25.    protected void onDestroy() {
  26.        super.onDestroy();
  27.        ActivityCollector.removeActivity(this);
  28.    }
  29.    class ForceOfflineReceiver extends BroadcastReceiver {
  30.        @Override
  31.        public void onReceive(final Context context, Intent intent) {
  32.            AlertDialog.Builder builder = new AlertDialog.Builder(context); // 创建一个警告对话框
  33.            builder.setTitle("警告");
  34.            builder.setMessage("你被强制下线,请重新登录");
  35.            builder.setCancelable(false);
  36.            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
  37.                @Override
  38.                public void onClick(DialogInterface dialog, int which) {
  39.                    ActivityCollector.finishAll(); // 销毁所有活动
  40.                    Intent intent = new Intent(context, LoginActivity.class);
  41.                    context.startActivity(intent); // 重新启动LoginActivity
  42.                }
  43.            });
  44.            builder.show();
  45.        }
  46.    }
  47. }

之后所有活动类继承BaseActivity类。

创建登录活动和布局,主要是输入账号和密码进行判断登录,默认账号admin,密码123456:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3.    xmlns:android="http://schemas.android.com/apk/res/android"
  4.    android:orientation="vertical"
  5.    android:layout_width="match_parent"
  6.    android:layout_height="match_parent">
  7.    <LinearLayout
  8.        android:orientation="horizontal"
  9.        android:layout_width="match_parent"
  10.        android:layout_height="60dp">
  11.        <TextView
  12.            android:textSize="18sp"
  13.            android:text="账号:"
  14.            android:layout_gravity="center_vertical"
  15.            android:layout_width="90dp"
  16.            android:layout_height="wrap_content" />
  17.        <EditText
  18.            android:id="@+id/account"
  19.            android:layout_gravity="center_vertical"
  20.            android:layout_width="0dp"
  21.            android:layout_weight="1"
  22.            android:layout_height="wrap_content" />
  23.    </LinearLayout>
  24.    <LinearLayout
  25.        android:orientation="horizontal"
  26.        android:layout_width="match_parent"
  27.        android:layout_height="60dp">
  28.        <TextView
  29.            android:textSize="18sp"
  30.            android:text="密码:"
  31.            android:layout_gravity="center_vertical"
  32.            android:layout_width="90dp"
  33.            android:layout_height="wrap_content" />
  34.        <EditText
  35.            android:id="@+id/password"
  36.            android:inputType="textPassword"
  37.            android:layout_gravity="center_vertical"
  38.            android:layout_width="0dp"
  39.            android:layout_weight="1"
  40.            android:layout_height="wrap_content" />
  41.    </LinearLayout>
  42.    <Button
  43.        android:id="@+id/login"
  44.        android:text="登录"
  45.        android:layout_width="match_parent"
  46.        android:layout_height="60dp" />
  47. </LinearLayout>
  1. public class LoginActivity extends BaseActivity {
  2.    private EditText accountEdit;
  3.    private EditText passwordEdit;
  4.    private Button login;
  5.    @Override
  6.    protected void onCreate(Bundle savedInstanceState) {
  7.        super.onCreate(savedInstanceState);
  8.        setContentView(R.layout.activity_login);
  9.        accountEdit = (EditText) findViewById(R.id.account);
  10.        passwordEdit = (EditText) findViewById(R.id.password);
  11.        login = (Button) findViewById(R.id.login);
  12.        login.setOnClickListener(new View.OnClickListener() {
  13.            @Override
  14.            public void onClick(View v) {
  15.                String account = accountEdit.getText().toString();
  16.                String password = passwordEdit.getText().toString();
  17.                // 如果密码123456,账号admin,则认为登录成功
  18.                if (account.equals("admin") && password.equals("123456")) {
  19.                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
  20.                    startActivity(intent);
  21.                    finish();
  22.                } else {
  23.                    Toast.makeText(LoginActivity.this, "账号或密码不匹配", Toast.LENGTH_SHORT).show();
  24.                }
  25.            }
  26.        });
  27.    }
  28. }

最后,在MainActivity中,添加一个按钮,并实现它的点击事件,发送一条强制下线广播:

  1. public class MainActivity extends BaseActivity {
  2.    @Override
  3.    protected void onCreate(Bundle savedInstanceState) {
  4.        super.onCreate(savedInstanceState);
  5.        setContentView(R.layout.activity_main);
  6.        Button forceOffline = (Button) findViewById(R.id.force_offline);
  7.        forceOffline.setOnClickListener(new View.OnClickListener() {
  8.            @Override
  9.            public void onClick(View v) {
  10.                Intent intent = new Intent("top.xiexiaodong.broadcast.FORCE_OFFLINE");
  11.                sendBroadcast(intent);
  12.            }
  13.        });
  14.    }
  15. }


0 0
原创粉丝点击