android 利用廣播實現程式的強制退出

來源:互聯網
上載者:User

標籤:利用廣播實作類別qq的強制退出

利用廣播機制,實現程式的強制退出。

    前面有篇博文,寫到了一鍵退出,這裡利用到了那裡的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();        }    }}

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

android 利用廣播實現程式的強制退出

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.