《第一行代码》实现强制下线功能

版权声明:本文为博主原创文章,未经博主允许不得转载,欢迎留言。 https://blog.csdn.net/qq_15046309/article/details/82937632

第5章的内容不是很多,也很简单,最后的这个小项目总结一下。

强制下线功能就是类似于QQ的那个,在重复上线时把你顶掉线,我们要做的就是在页面上点击一下按钮,弹出来对话框,点击对话框,就会回到登录界面,不可返回。

这意味着,当点击按钮的同时,系统把所有的的活动都杀死掉,然后重新启动登录活动。这里需要一个管理所有活动的类;那个按钮肯定是一个广播发射器,我们需要一个接收器,我们会想那应该每个界面都需要一个接收器啊,重复的代码太多了。其实我们可以让所有的活动继承自一个Activity的子类,在这个子类中实现接收器的设置和回收。更加准确的来说,我们需要在Activity的活动周期的onResume和onPause里面分别写注册和销毁【与前面的内容连上了】,我们只需要在回收栈的顶上听到广播就可以了,其他的活动没必要听到。

管理类

package com.example.forceunload;

import android.app.Activity;

import java.util.ArrayList;
import java.util.List;

public class ActivityCollector  {
    public static List<Activity> activities=new ArrayList<>();
    public static void addActivity(Activity   activity)
    {
        activities.add(activity);
    }
    public static void removeActivity(Activity activity)
    {
        activities.remove(activity);
    }
    public static void finishAll()
    {
        for (Activity activity :activities)
        {
            if (!activity.isFinishing())
            {
                activity.finish();
            }
        }
    }
}

//这是登录界面,用来判断密码是否正确
package com.example.forceunload;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class LoadActivity extends BaseActivity {
    private Button buttonforload;
    private EditText editText_account;
    private EditText editText_pass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_load);
        buttonforload=(Button) findViewById(R.id.Login);
        editText_account=(EditText) findViewById(R.id.accout_text);
        editText_pass=(EditText) findViewById(R.id.password_text);
        buttonforload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String accout=editText_account.getText().toString();
                String password=editText_pass.getText().toString();
                if(accout.equals("admin")&&password.equals("123456"))
                {
                    Intent intent=new Intent(LoadActivity.this,MainActivity.class);
                    startActivity(intent);
                }
            }
        });
    }
}

对应的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
>
    <LinearLayout
    android:id="@+id/line1"
    android:layout_margin="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/account"
        android:text="Account   "
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/accout_text"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_marginLeft="5dp"
        android:layout_height="wrap_content" />
</LinearLayout>
    <LinearLayout
        android:id="@+id/line2"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/password"
            android:text="Password"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <EditText
            android:id="@+id/password_text"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_marginLeft="5dp"
            android:inputType="textPassword"
            android:layout_height="wrap_content" />
</LinearLayout>
    <Button
        android:id="@+id/Login"
        android:text="Login"
        android:textAllCaps="false"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
//这是广播发送器,也是强制下线按钮的所在地
package com.example.forceunload;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button) findViewById(R.id.force);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent("com.android.forceunload.FORCR_OFFLINE");
                sendBroadcast(intent);
            }
        });
    }
}

对应的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  >
    <Button
        android:id="@+id/force"
        android:text="下线"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

最重要的父类

package com.example.forceunload;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;

public class BaseActivity extends Activity {
    private  Myreceiver myreceiver;
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this);
    }
    class Myreceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(final 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) {
                    ActivityCollector.finishAll();
                    Intent intent=new Intent(context,LoadActivity.class);
                    startActivity(intent);
                }
            });
               builder.show();
            }
        }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("com.android.forceunload.FORCR_OFFLINE");
        myreceiver=new Myreceiver();
        registerReceiver(myreceiver,intentFilter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if(myreceiver!=null)
        {unregisterReceiver(myreceiver);}
        else
        {
            myreceiver=null;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_15046309/article/details/82937632
今日推荐