首页 > 其他 > 详细

关闭所有Activity的ActivityCollector

时间:2020-06-17 10:59:17      阅读:78      评论:0      收藏:0      [点我收藏+]

代码示例(别处登陆踢用户下线)

Step 1:准备一个关闭所有Activity的ActivityCollector ,这里之前用前面Activity提供的那个!

ActivityCollector.java

 1 public class ActivityCollector {
 2     private static List<Activity> activities = new ArrayList<Activity>();
 3     public static void addActivity(Activity activity) {
 4         activities.add(activity);
 5     }
 6     public static void removeActivity(Activity activity) {
 7         activities.remove(activity);
 8     }
 9     public static void finishAll() {
10         for (Activity activity : activities) {
11             if (!activity.isFinishing()) {
12                 activity.finish();
13             }
14         }
15     }
16 }

Step 2:先写要给简单的BaseActivity,用来继承,接着写下登陆界面!

 1 public class BaseActivity extends AppCompatActivity {
 2     @Override
 3     protected void onCreate(Bundle savedInstanceState) {
 4         super.onCreate(savedInstanceState);
 5         ActivityCollector.addActivity(this);
 6     }
 7 
 8     @Override
 9     protected void onDestroy() {
10         super.onDestroy();
11         ActivityCollector.removeActivity(this);
12     }
13 }

LoginActivity.java:

 1 public class LoginActivity extends BaseActivity implements View.OnClickListener{
 2 
 3 
 4     private SharedPreferences pref;
 5     private SharedPreferences.Editor editor;
 6 
 7     private EditText edit_user;
 8     private EditText edit_pawd;
 9     private Button btn_login;
10 
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_login);
16         pref = PreferenceManager.getDefaultSharedPreferences(this);
17 
18         bindViews();
19     }
20 
21     private void bindViews() {
22         edit_user = (EditText) findViewById(R.id.edit_user);
23         edit_pawd = (EditText) findViewById(R.id.edit_pawd);
24         btn_login = (Button) findViewById(R.id.btn_login);
25         btn_login.setOnClickListener(this);
26     }
27 
28     @Override
29     protected void onStart() {
30         super.onStart();
31         if(!pref.getString("user","").equals("")){
32             edit_user.setText(pref.getString("user",""));
33             edit_pawd.setText(pref.getString("pawd",""));
34         }
35     }
36 
37     @Override
38     public void onClick(View v) {
39         String user = edit_user.getText().toString();
40         String pawd = edit_pawd.getText().toString();
41         if(user.equals("123")&&pawd.equals("123")){
42             editor = pref.edit();
43             editor.putString("user", user);
44             editor.putString("pawd", pawd);
45             editor.commit();
46             Intent intent = new Intent(LoginActivity.this, MainActivity.class);
47             startActivity(intent);
48             Toast.makeText(LoginActivity.this,"哟,竟然蒙对了~",Toast.LENGTH_SHORT).show();
49             finish();
50         }else{
51             Toast.makeText(LoginActivity.this,"这么简单都输出,脑子呢?",Toast.LENGTH_SHORT).show();
52         }
53 
54     }
55 }

Step 3:自定义一个BroadcastReceiver,在onReceive里完成弹出对话框操作,以及启动登陆页面: MyBcReceiver.java

 1 public class MyBcReceiver extends BroadcastReceiver {
 2     @Override
 3     public void onReceive(final Context context, Intent intent) {
 4         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
 5         dialogBuilder.setTitle("警告:");
 6         dialogBuilder.setMessage("您的账号在别处登录,请重新登陆~");
 7         dialogBuilder.setCancelable(false);
 8         dialogBuilder.setPositiveButton("确定",
 9                 new DialogInterface.OnClickListener() {
10                     @Override
11                     public void onClick(DialogInterface dialog, int which) {
12                         ActivityCollector.finishAll();
13                         Intent intent = new Intent(context, LoginActivity.class);
14                         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
15                         context.startActivity(intent);
16                     }
17                 });
18         AlertDialog alertDialog = dialogBuilder.create();
19         alertDialog.getWindow().setType(
20                 WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
21         alertDialog.show();
22     }
23 }

别忘了AndroidManifest.xml中加上系统对话框权限: < uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Step 4:在MainActivity中,实例化localBroadcastManager,拿他完成相关操作,另外销毁时 注意unregisterReceiver!

MainActivity.java

 1 public class MainActivity extends BaseActivity {
 2 
 3     private MyBcReceiver localReceiver;
 4     private LocalBroadcastManager localBroadcastManager;
 5     private IntentFilter intentFilter;
 6 
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         super.onCreate(savedInstanceState);
10         setContentView(R.layout.activity_main);
11         localBroadcastManager = LocalBroadcastManager.getInstance(this);
12 
13         //初始化广播接收者,设置过滤器
14         localReceiver = new MyBcReceiver();
15         intentFilter = new IntentFilter();
16         intentFilter.addAction("com.jay.mybcreceiver.LOGIN_OTHER");
17         localBroadcastManager.registerReceiver(localReceiver, intentFilter);
18 
19         Button btn_send = (Button) findViewById(R.id.btn_send);
20         btn_send.setOnClickListener(new View.OnClickListener() {
21             @Override
22             public void onClick(View v) {
23                 Intent intent = new Intent("com.jay.mybcreceiver.LOGIN_OTHER");
24                 localBroadcastManager.sendBroadcast(intent);
25             }
26         });
27     }
28 
29     @Override
30     protected void onDestroy() {
31         super.onDestroy();
32         localBroadcastManager.unregisterReceiver(localReceiver);
33     }
34 }

好的,就是这么简单,别忘记注册Activity哦~

2.Android 4.3以上版本监听开机启动广播的问题解决:

在Android 4.3以上的版本,允许我们将应用安装在SD上,我们都知道是系统开机 间隔一小段时间后,才装载SD卡的,这样我们的应用就可能监听不到这个广播了! 所以我们需要既监听开机广播又监听SD卡挂载广播!

另外,有些手机可能并没有SD卡,所以这两个广播监听我们不能写到同一个Intetn-filter里 而是应该写成两个,配置代码如下:

 1 <receiver android:name=".MyBroadcastReceiver">
 2     <intent-filter>
 3         <action android:name="android.intent.action.BOOT_COMPLETED"/>
 4     </intent-filter>
 5     <intent-filter>
 6         <action android:name="ANDROID.INTENT.ACTION.MEDIA_MOUNTED"/>
 7         <action android:name="ANDROID.INTENT.ACTION.MEDIA_UNMOUNTED"/>
 8         <data android:scheme="file"/>
 9     </intent-filter>
10 </receiver>

 

关闭所有Activity的ActivityCollector

原文:https://www.cnblogs.com/qunxuan/p/13150517.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!