Android 使用Activity和广播实现强制下线功能
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 验证等功能。
原文地址: https://www.cveoy.top/t/topic/e0EC 著作权归作者所有。请勿转载和采集!