android 利用广播实现程序的强制退出

从来好事天生俭,自古瓜儿苦后甜。这篇文章主要讲述android 利用广播实现程序的强制退出相关的知识,希望能为你提供帮助。
利用广播机制,实现程序的强制退出。
        前面有篇博文,写到了一键退出,这里利用到了那里的ActivityCollector的集合和BaseActivity

        功能:打开程序后,先登录,登录成功后,进入主页面,主页面有个按钮,点击后弹出窗口,用户点击 “是”之后退出程序



        1、ActivityCollector

package  com.yuanlp.forceexit; /**   *  Created  by  原立鹏  on  2017/6/28.   */import  android.app.Activity; import  java.util.ArrayList; import  java.util.List; /**   *  activity集合   */ public  class  ActivityCollector  {      public  static  List< Activity>   activityList=new  ArrayList< > ();         public  static  void  addActivity(Activity  activity){                 activityList.add(activity);         }        public  static  void  remove(Activity  activity){                 activityList.remove(activity);         }        public  static  void  finishAll(){                 for  (Activity  activity:activityList){                         if  (!activity.isFinishing()){    //判断activity是否销毁                                 activity.finish();       //销毁activity                         }                 }         } }2、BaseActivity    作为后面activity的父类,继承自AppComapActivitypackage  com.yuanlp.forceexit; import  android.content.BroadcastReceiver; import  android.content.Context; import  android.content.DialogInterface; import  android.content.Intent; import  android.content.IntentFilter; import  android.os.Bundle; import  android.support.v7.app.AlertDialog; import  android.support.v7.app.AppCompatActivity; /**   *  Created  by  原立鹏  on  2017/6/28.   */public  class  BaseActivity    extends  AppCompatActivity{         private  MyForceExitReceiver  receiver;     //声明一个自己的广播接收者内部类        @Override       protected  void  onCreate(Bundle  savedInstanceState)  {                 super.onCreate(savedInstanceState);                 ActivityCollector.addActivity(this);         }        /**           *  在activity处于返回栈顶,即处于焦点时,注册一个广播接收者           */         public  void  onResume(){                 super.onResume();                 IntentFilter  intentFilter=new  IntentFilter();     //实例化一个intent过滤器                 intentFilter.addAction("com.yuanlp.exit.FORCEXIT");     //只关心自己想要的广播                 receiver=new  MyForceExitReceiver();                 registerReceiver(receiver,intentFilter);     //动态注册广播        }         public  void  onPause(){    //当当前activity被弹出框占用时,解除注册                 super.onPause();                 if  (receiver!=null){                         unregisterReceiver(receiver);                         receiver=null;                 }         }         public  void  onDestroy(){                 super.onDestroy();                 ActivityCollector.finishAll();         }        /**           *  一个广播接收者,接收到广播后,弹出框提示用户重新登录,强制退出           */         private  class  MyForceExitReceiver  extends  BroadcastReceiver{                 @Override                 public  void  onReceive(final  Context  context,  final  Intent  intent)  {                         AlertDialog.Builder  builder=new  AlertDialog.Builder(context);                         builder.setTitle("warning");                         builder.setMessage("你被强制退出,请重新登录");                         builder.setCancelable(false);     //禁止用户取消这个弹框                         builder.setPositiveButton("OK",  new  DialogInterface.OnClickListener()  {                                 @Override                                 public  void  onClick(DialogInterface  dialog,  int  which)  {                                         ActivityCollector.finishAll();       //销毁所有活动                                         Intent  intent=new  Intent(context,LoginActivity.class);   //跳转至登录界面                                         context.startActivity(intent);                                 }                         });                         builder.show();                 }         } }

【android 利用广播实现程序的强制退出】3、LoginActivity   登录成功后,跳转到MainActivity界面。这里要在AndroidManifext.xml设置为这个activity是launcher,即打开后的第一个界面
package  com.yuanlp.forceexit; import  android.content.Intent; import  android.os.Bundle; import  android.view.View; import  android.widget.EditText; public  class  LoginActivity  extends  BaseActivity  {        private  EditText  mName;         private  EditText  mPassword;         @Override         protected  void  onCreate(Bundle  savedInstanceState)  {                 super.onCreate(savedInstanceState);                 setContentView(R.layout.activity_login);                 mName  =  (EditText)  findViewById(R.id.et_name);                 mPassword  =  (EditText)  findViewById(R.id.et_password);         }        public  void  login(View  view){                 String  name=mName.getText().toString().trim();                 String  password=mPassword.getText().toString().trim();                 if  ("admin".equals(name)& & "123456".equals(password)){                         Intent  intent=new  Intent(this,MainActivity.class);                         startActivity(intent);                 }         } }

4、activity_login.xml   简单的一个LinearLayout,vertical排版,里面放了2个水平布局的LinearLayout,分别放一个用户名和密码的EditText。最下方一个button,实现登录方法
< ?xml  version="1.0"  encoding="utf-8"?> < 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"         android:orientation="vertical"         tools:context="com.yuanlp.forceexit.LoginActivity">         < LinearLayout                 android:layout_width="match_parent"                 android:layout_height="60dp"                 android:orientation="horizontal">                 < EditText                         android:id="@+id/et_name"                         android:layout_width="wrap_content"                         android:layout_height="wrap_content"                         android:layout_weight="1"                         android:ems="10"                         android:hint="账号"                         android:inputType="textPersonName"/>         < /LinearLayout>         < LinearLayout                 android:layout_width="match_parent"                 android:layout_height="60dp"                 android:orientation="horizontal">                 < EditText                         android:id="@+id/et_password"                         android:layout_width="wrap_content"                         android:layout_height="wrap_content"                         android:layout_weight="1"                         android:ems="10"                         android:hint="密码"                         android:inputType="textPersonName"/>         < /LinearLayout>         < Button                 android:id="@+id/button"                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:onClick="login"                 android:text="Button"/> < /LinearLayout>

5、MainActivity 
        里面主要的是一个button的方法,实现发送广播。

package  com.yuanlp.forceexit; import  android.content.Intent; import  android.os.Bundle; import  android.view.View; public  class  MainActivity  extends  BaseActivity  {        @Override         protected  void  onCreate(Bundle  savedInstanceState)  {                 super.onCreate(savedInstanceState);                 setContentView(R.layout.activity_main);         }        public  void  exit(View  view){                 Intent  intent=new  Intent("com.yuanlp.exit.FORCEXIT");                 sendBroadcast(intent);     //发送广播         } }

6、activity_main.xml
< ?xml  version="1.0"  encoding="utf-8"?> < android.support.constraint.ConstraintLayout         xmlns:android="http://schemas.android.com/apk/res/android"         xmlns:app="http://schemas.android.com/apk/res-auto"         xmlns:tools="http://schemas.android.com/tools"         android:layout_width="match_parent"         android:layout_height="match_parent"         tools:context="com.yuanlp.forceexit.MainActivity">         < Button                 android:id="@+id/button2"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:onClick="exit"                 android:text="强制退出"                 app:layout_constraintBottom_toBottomOf="parent"                 app:layout_constraintTop_toTopOf="parent"                 tools:layout_editor_absoluteX="126dp"/> < /android.support.constraint.ConstraintLayout>



本文出自 “YuanGuShi” 博客,请务必保留此出处http://cm0425.blog.51cto.com/10819451/1942888

    推荐阅读