Android连载25-强制下线具体实现

一、回顾 上次连载写了两个类,一个类ActivityCollector.java用于管理所有的活动;一个类是BaseActivity.java作为所有活动的父类; 还有一个放在layout目录中的登录界面login.xml 二、...

一、回顾

  • 上次连载写了两个类,一个类ActivityCollector.java用于管理所有的活动;一个类是BaseActivity.java作为所有活动的父类;
  • 还有一个放在layout目录中的登录界面login.xml

二、登录页面的活动

  • 接下来写一个登录页面的活动,继承自BaseActivity.java
package com.example.broadcastbestpractice;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends BaseActivity{
 private EditText accountEdit;
 
 private EditText passwordEdit;
 
 private Button login;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.login);
  accountEdit = (EditText)findViewById(R.id.account);
  passwordEdit = (EditText)findViewById(R.id.password);
  login = (Button) findViewById(R.id.login);
  login.setOnClickListener( new OnClickListener() {
   @Override
   public void onClick(View v) {
    String account =accountEdit.getText().toString();
    String password = passwordEdit.getText().toString();
    //如果账号是admin,密码是12345,就认为登录成功
    if(account.contentEquals("admin") && password.equals("12345")) {
     Intent intent = new Intent(LoginActivity.this,MainActivity.class);
     startActivity(intent);
     finish();
    }else {
     Toast.makeText(LoginActivity.this,"account or password is invalid",Toast.LENGTH_SHORT).show();
    }
   }   
  });   
 }
}
  • 使用findViewById方法分别获取输入框以及登录按钮的实例
  • 然后设置点击事件:先判断账号和密码对不对,对了就是用intent实例进入到主活动中;错了就重新进入登录页面,并且打印出一条提示语。
  • 接着改造一下主界面,当然加上强制下线功能就行,不要其他花里胡哨的。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/force_offline"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Send force offline broadcast" />

</LinearLayout>
  • 非常简单,就是加了一个按钮
  • 接下来修改主活动的逻辑
package com.example.broadcastbestpractice;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  Button forceOffline = (Button) findViewById(R.id.force_offline);
  forceOffline.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    Intent intent = new Intent("com.example.broadcastbestpractice.FORCE_OFFLINE");
    sendBroadcast(intent);
   }
  });
 }
}
  • 在点击事件里面,我们发送了com.example.broadcastbestpractice.FORCE_OFFLINE广播,用于通知程序强制用户下线。
  • 这说明强制用户下线的功能,应该写在接收器中,不写在具体某个活动中,这样发出“下线”广播的时候,就能完成下线操作了。
  • 接下来创建一个广播接收器
package com.example.broadcastbestpractice;

import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.WindowManager;
import android.content.DialogInterface.OnClickListener;;

public class ForceOfflineReceiver extends BroadcastReceiver{
 @Override
 public void onReceive(final Context context,Intent intent) {
  AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
  dialogBuilder.setTitle("Warning");
  dialogBuilder.setMessage("You are forced to be offline,Please try to login again.");
  dialogBuilder.setCancelable(false);
  //下面这句改了
  dialogBuilder.setPositiveButton("OK", new OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog,int which) {
    ActivityCollector.finishAll();//销毁所有的活动
    Intent intent = new Intent(context,LoginActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);//重新启动LoginActivity
   }
  });
  AlertDialog alertDialog = dialogBuilder.create();
  //需要设置AlertDialog的类型,保证广播接收器中可以正常弹出
  alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
  alertDialog.show();
 }
}

25.125.1

三、源码:

  • 发表于 2020-07-20 00:20
  • 阅读 ( 117 )
  • 分类:网络文章

条评论

请先 登录 后评论
不写代码的码农
小编

篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除