Android的实现强制下线(不同应用之间)功能----简易微信聊天示例
强制下线功能需要先关闭所有活动,然后在回到登录界面。
新建一个ActivityCollector类管理所有活动。下见代码段:
//需要用到一个专门的集合类对所有的活动进行管理
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();//通过一个List来暂存活动
public static void addActivity(Activity activity){
activities.add(activity);//提供了一个addActivity()方法用于向List中添加一个活动
}
public static void removeActivity(Activity activity){
activities.remove(activity);//提供了一个addActivity()方法用于从List中移除一个活动
}
public static void finishAll(){//finish()方法用于将List中存储的活动全部销毁掉
for (Activity activity : activities){
if (!activity.isFinishing()){
activity.finish();
}
}
activities.clear();
}
}
在BaseSActivity.java中调用
首先需要我们希望在另外一个应用点击了[强制下线]的按钮时,当前应用不论在哪个页面,都可以接受到此类广播。如果在每个活动上都注册一个广播接受器时,常会导致代码冗余。
答案其实很明显,只需新建一个类(命名:BaseSActivity.java),注册一个广播接受器,并且,让所有活动都继承BaseSActivity.java这样强制下线的功能就不会依附任何界面。
在同一个模型下的应用,接受广播是使用的onResume()和的onPause()方法注册和取消注册广播。
如果在不同型号之间联系的应用,使用上述方法是行不通的。采用动态注册的广播接受器
例如:A应用:发送广播B应用:接受广播
甲应用发送广播,B应用等待接收。当执行切换程序(A→B)的操作时,系统就会调用的onPause()方法。此时,广播已经被注销。在乙应用也就无法接收来自甲应用的广播。
因此,选择在的onCreate()和onDestory()方法执行广播的注册和注销。
以下是部分代码:
一个应用:发送广播
forceOffline.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent =
new Intent("com.example.danser.mywechat.ForceOfflineReceiver");
sendBroadcast(intent);
}
});
乙应用:接受广播
public class BaseActivity extends AppCompatActivity {
private ForceOfflineReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.danser.mywechat.ForceOfflineReceiver");//接受广播
receiver = new ForceOfflineReceiver();//注册广播器
registerReceiver(receiver,intentFilter);
}
@Override
protected void onDestroy() {///取消注册广播器
super.onDestroy();
if (receiver != null){
unregisterReceiver(receiver);
receiver = null;
}
ActivityCollector.removeActivity(this);
}
class ForceOfflineReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);//使用Builder构建一个对话框
builder.setTitle("提示");
builder.setMessage("你的微信号在其他设备上登录," +
"如不是本人操作,请及时更改密码!");
builder.setCancelable(false);//将对话框设置为不可取消
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCollector.finishAll();//销毁所有活动
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);//重启登录界面
}
});
builder.show();
}
}
}
接下来需要,好好补遗漏的知识了。