android实现强制下线功能
2017-01-06 21:49
676 查看
我们可能都会遇见过下面这种情况,例如我们的QQ,当有其他的手机登录我们的账号之后,就会弹出一个对话框,意思就是“我们的账号在其他地方登录,您已被强制下线”。点击按钮之后,我们就会重新进入登录界面。那么这种强制下线的功能是如何实现的呢?其实非常的简单,就是一个广播。当我们的基类收到这个广播之后,点击对话框中的按钮。强制关闭所有的Activity。然后进入登录界面就可以了。先看一下今天的演示效果吧。
从上面的功能图可以看到
登录界面--->主界面(按钮)—>点击按钮(弹出被迫下线对话框)—>点击对话框的确定按钮—>登录界面
第一步:我们按照这个流程做一遍。首先我们新建一个项目ForceOffLineTest。新建一个ActivityCollector。起作用是回收所有的Activity,我们使用这个类的目的就是点击对话框中的按钮时,能够结束所有的Activity,听起来有点像之前我们使用过的点击按钮退出整个程序的功能。其实实现方法是一样的。看源代码:
第一:调用ActivityCollector中的三个方法。
第二:注册一个广播,并实现广播:在文章的开始我们提到过我们的下线功能是通过广播来完成的,我们的广播就是在这里去接受的。
接下来的就简单了,新建我们的登录界面LoginActivity。在这个Activty中我们的默认用户名为admin,密码123456。
好了最后一步,我们在MainActivity中发送广播
总结:我们发送的广播是动态的,也就是在java代码中添加的在BaseActivty的onResume方法中我们可以看到。
从上面的功能图可以看到
登录界面--->主界面(按钮)—>点击按钮(弹出被迫下线对话框)—>点击对话框的确定按钮—>登录界面
第一步:我们按照这个流程做一遍。首先我们新建一个项目ForceOffLineTest。新建一个ActivityCollector。起作用是回收所有的Activity,我们使用这个类的目的就是点击对话框中的按钮时,能够结束所有的Activity,听起来有点像之前我们使用过的点击按钮退出整个程序的功能。其实实现方法是一样的。看源代码:
package com.fdd; import java.util.ArrayList; import java.util.List; import android.app.Activity; public class ActivityCollector { //声明一个List集 public static List<Activity> activities=new ArrayList<Activity>(); //将activity添加到List集中 public static void addActivity(Activity activity){ activities.add(activity); } //将某一个Activity移除 public static void removeActivity(Activity activity){ activities.remove(activity); } //结束所有添加进来的的Activity public static void finishAll(){ for(Activity activity:activities){ //如果activity没有销毁,那么销毁 if(!activity.isFinishing()){ activity.finish(); } } } }第二步 新建一个基类,BaseActivity, 我们会在这个类中调用上面ActivityCollector的方法。我们定义好了之后。让下面所有的Activity全部继承与BaseActivity。
package com.fdd; import android.app.Activity; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; public class BaseActivity extends Activity { private MyReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //将启动的Activity添加进来 ActivityCollector.addActivity(this); } @Override protected void onDestroy() { ActivityCollector.removeActivity(this); super.onDestroy(); } //注册广播 @Override protected void onResume() { IntentFilter fliter=new IntentFilter(); fliter.addAction("OffLine"); receiver=new MyReceiver(); registerReceiver(receiver, fliter); super.onResume(); } //注销广播 @Override protected void onPause() { unregisterReceiver(receiver); super.onPause(); } //接收广播 private class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(final Context context, Intent intent) { AlertDialog.Builder builer=new AlertDialog.Builder(context); builer.setTitle("强制下线广播") .setMessage("您的账号在异地登录") .setCancelable(true)//设置取消按钮不能使用, .setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCollector.finishAll() Intent in=new Intent(context ,LoginActivity.class); startActivity(in); } }).show(); } } }我们可以看到,我们在里面主要完成了两个功能。我们对里面的几个方法,一个一个叙述。
第一:调用ActivityCollector中的三个方法。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //将启动的Activity添加进来 ActivityCollector.addActivity(this); }我们由于我们的子类会继承BaseActivity。这样每当我们得BaseActivity创建的的时候,会将之类的实例加载进来。
@Override protected void onDestroy() { ActivityCollector.removeActivity(this); super.onDestroy(); }这个方法更好理解,当我们销毁BaseActivity就会把加载进来的子类全部销毁,这样就完成了退出程序的功能。
第二:注册一个广播,并实现广播:在文章的开始我们提到过我们的下线功能是通过广播来完成的,我们的广播就是在这里去接受的。
//接收广播 private class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(final Context context, Intent intent) { AlertDialog.Builder builer=new AlertDialog.Builder(context); builer.setTitle("强制下线广播") .setMessage("您的账号在异地登录") .setCancelable(true)//设置取消按钮不能使用, .setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCollector.finishAll() Intent in=new Intent(context ,LoginActivity.class); startActivity(in); } }).show(); } }我们在接受广播的时候,弹出一个强制下线的对话框,注意我们得“取消”一定要设置成不可用。否则我们点击取消按钮仍然还会停留在原来的界面。
接下来的就简单了,新建我们的登录界面LoginActivity。在这个Activty中我们的默认用户名为admin,密码123456。
public class LoginActivity extends BaseActivity { private Button login; private EditText username; private EditText password; private String username_str; private String password_str; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.login); super.onCreate(savedInstanceState); login=(Button) findViewById(R.id.login); username=(EditText) findViewById(R.id.username); password=(EditText) findViewById(R.id.password); login.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //注意:一定要在此处获取.如果在外面获取的话 //得到的值即为一开始初始化得值 username_str=username.getText().toString(); password_str=password.getText().toString(); if(username_str.equals("admin")&&password_str.equals("123456")){ Intent intent=new Intent(LoginActivity.this,MainActivity.class); startActivity(intent); finish(); }else{ Toast.makeText(LoginActivity.this, "输入有误", 3000).show(); } } }); } }我们需要继承BaseActivity。默认密码和用户名。
好了最后一步,我们在MainActivity中发送广播
public class MainActivity extends BaseActivity { //发送广播按钮 private Button sendBroadCase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sendBroadCase=(Button) findViewById(R.id.sendBroadCast); //发送下线广播 sendBroadCase.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent("OffLine"); sendBroadcast(intent); } }); } }
总结:我们发送的广播是动态的,也就是在java代码中添加的在BaseActivty的onResume方法中我们可以看到。
相关文章推荐
- Android笔记(二十六)广播实践——实现强制下线功能
- 小白求助!!!请问Android 使用BroadCast实现强制下线功能,点击强制下线按钮,程序直接奔溃是为什么啊??
- android实现强制下线功能
- Android学习总结(八)———— 广播的最佳实践(实现强制下线功能)
- Android 实现强制下线功能
- Android开发之实现强制下线功能(上)
- Android 广播------实现强制下线功能
- Android 实现记住密码和强制下线功能
- android: 实现强制下线功能
- Android通过广播实现强制下线功能
- Android(Broadcast实现强制下线功能)
- Android强制下线功能实现的代码示例
- android#boardcast#广播实现强制下线功能
- 说说在 Android 中如何实现强制下线功能
- Android开发之实现强制下线功能(下)
- Android Broadcast--实现强制下线功能
- Android 使用BroadCast实现强制下线功能
- Android进阶之路 - 广播实现强制下线功能
- Android开发中强制下线功能实现
- 一天一点Android知识(实现强制下线功能)