Android 使用Activity和广播实现强制下线功能

本文将介绍如何在Android Studio中使用活动和广播接收器实现一个简单的登录系统,并包含强制下线功能。

1. 功能需求

  • 登录界面: 包含用户名和密码输入框、登录按钮,并实现用户名和密码校验、记住密码功能。* 主界面: 至少包含两个按钮,每个按钮跳转到不同页面,每个页面包含一个'强制下线'功能按钮。* 对话框: 点击'强制下线'按钮后,弹出对话框,禁止用户继续使用其他页面,只能点击对话框中的按钮重新登录。

2. 主要知识点

  • Activity (活动): Android 应用程序的基本组件,用于构建用户界面和处理用户交互。* BroadcastReceiver (广播接收器): 允许应用程序接收来自系统或其他应用程序的广播消息,并在后台执行操作。

3. 代码实现

3.1 登录界面 (LoginActivity)

**activity_login.xml 布局文件:**xml

<EditText        android:id='@+id/et_username'        android:layout_width='match_parent'        android:layout_height='wrap_content'        android:hint='用户名' />

<EditText        android:id='@+id/et_password'        android:layout_width='match_parent'        android:layout_height='wrap_content'        android:layout_below='@id/et_username'        android:hint='密码'        android:inputType='textPassword' />

<Button        android:id='@+id/btn_login'        android:layout_width='wrap_content'        android:layout_height='wrap_content'        android:layout_below='@id/et_password'        android:text='登录' />

<CheckBox        android:id='@+id/checkbox_remember'        android:layout_width='wrap_content'        android:layout_height='wrap_content'        android:layout_below='@id/btn_login'        android:text='记住密码' />

**LoginActivity.java 代码:**javapublic class LoginActivity extends AppCompatActivity {

private EditText etUsername;    private EditText etPassword;    private Button btnLogin;    private CheckBox checkboxRemember;

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

    etUsername = findViewById(R.id.et_username);        etPassword = findViewById(R.id.et_password);        btnLogin = findViewById(R.id.btn_login);        checkboxRemember = findViewById(R.id.checkbox_remember);

    btnLogin.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String username = etUsername.getText().toString();                String password = etPassword.getText().toString();

            // 校验用户名和密码                if (username.equals('admin') && password.equals('123456')) {                    // 登录成功                    if (checkboxRemember.isChecked()) {                        // 记住密码                        SharedPreferences.Editor editor = getSharedPreferences('login', MODE_PRIVATE).edit();                        editor.putString('username', username);                        editor.putString('password', password);                        editor.apply();                    }

                // 跳转到主界面                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);                    startActivity(intent);                    finish();                } else {                    // 登录失败                    Toast.makeText(LoginActivity.this, '用户名或密码错误', Toast.LENGTH_SHORT).show();                }            }        });

    // 检查是否记住密码        SharedPreferences preferences = getSharedPreferences('login', MODE_PRIVATE);        String savedUsername = preferences.getString('username', '');        String savedPassword = preferences.getString('password', '');        etUsername.setText(savedUsername);        etPassword.setText(savedPassword);        checkboxRemember.setChecked(!savedUsername.isEmpty());    }}

3.2 主界面 (MainActivity)

**activity_main.xml 布局文件:**xml

<Button        android:id='@+id/btn_page1'        android:layout_width='wrap_content'        android:layout_height='wrap_content'        android:text='页面1' />

<Button        android:id='@+id/btn_page2'        android:layout_width='wrap_content'        android:layout_height='wrap_content'        android:text='页面2' />

**MainActivity.java 代码:**javapublic class MainActivity extends AppCompatActivity {

private Button btnPage1;    private Button btnPage2;

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

    btnPage1 = findViewById(R.id.btn_page1);        btnPage2 = findViewById(R.id.btn_page2);

    btnPage1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 跳转到页面1                Intent intent = new Intent(MainActivity.this, Page1Activity.class);                startActivity(intent);            }        });

    btnPage2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 跳转到页面2                Intent intent = new Intent(MainActivity.this, Page2Activity.class);                startActivity(intent);            }        });    }}

3.3 页面1 (Page1Activity) 和 页面2 (Page2Activity)

  • 这两个页面只需包含一个'强制下线'按钮,布局文件和 Activity 代码类似,此处省略。

3.4 强制下线对话框

**dialog_force_offline.xml 布局文件:**xml

<TextView        android:layout_width='match_parent'        android:layout_height='wrap_content'        android:text='您已被强制下线,请重新登录' />

<Button        android:id='@+id/btn_relogin'        android:layout_width='wrap_content'        android:layout_height='wrap_content'        android:text='重新登录' />

3.5 广播接收器 (ForceOfflineReceiver)

**ForceOfflineReceiver.java 代码:**javapublic class ForceOfflineReceiver extends BroadcastReceiver {

@Override    public void onReceive(Context context, Intent intent) {        AlertDialog.Builder builder = new AlertDialog.Builder(context);        builder.setTitle('提示');        builder.setMessage('您已被强制下线,请重新登录');        builder.setCancelable(false);        builder.setPositiveButton('重新登录', new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                // 跳转到登录界面                Intent loginIntent = new Intent(context, LoginActivity.class);                loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                context.startActivity(loginIntent);            }        });        AlertDialog dialog = builder.create();        dialog.show();    }}

3.6 AndroidManifest.xml 注册代码xml

<application        ...>        <activity android:name='.LoginActivity' />        <activity android:name='.MainActivity' />        <activity android:name='.Page1Activity' />        <activity android:name='.Page2Activity' />

    <receiver android:name='.ForceOfflineReceiver'>            <intent-filter>                <action android:name='com.example.myapplication.FORCE_OFFLINE' />            </intent-filter>        </receiver>    </application>

4. 使用说明

  • 在需要强制用户下线的页面中,发送广播 com.example.myapplication.FORCE_OFFLINE。* ForceOfflineReceiver 会接收到广播,并弹出对话框提示用户重新登录。

5. 总结

本文介绍了如何使用 Android 中的活动和广播接收器实现一个简单的强制下线功能。你可以根据实际需求修改代码,例如添加用户 token 验证等功能。

Android 使用Activity和广播实现强制下线功能

原文地址: https://www.cveoy.top/t/topic/e0EC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录