您的位置:首页 > 移动开发 > Android开发

Android学习笔记----实现强制下线功能

2016-03-05 22:02 423 查看
/*********************************************************************************************************************/

实现类似于QQ中当账号在别处登陆时候的强制下线功能

先创建一个 ActivityCollector 类用于管理所有的活动,代码如下所示:

public class ActivityCollector {

private static List<Activity> activities = new ArrayList<Activity>();

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();
}
}
}

}然后创建 BaseActivity 类作为所有活动的父类,代码如下所示:

public class BaseActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}

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

}


然后让所有的活动都继承自BaseActivity

接下来我们就需要创建一个广播接收器,新建 ForceOfflineReceiver继承自 BroadcastReceiver,代码如下所示:

public class ForceOfflineReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, Intent intent) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
dialogBuilder.setTitle("Warning");
dialogBuilder .setMessage("You are forced to be offline. Please try to login again.");
dialogBuilder.setCancelable(false);
dialogBuilder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCollector.finishAll();
Intent intent = new Intent(context, LoginActivity.class);// LoginActivity是自己定义的登陆Activity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();
}

}


由于我们是在广播接收器里启动活动的,因此一定要给Intent 加入FLAG_ACTIVITY_NEW_TASK 这个标志。最后,还需要把对话框的类型设为TYPE_SYSTEM_ALERT,不然它将无法在广播接收器里弹出。

接下来我们还需要对 AndroidManifest.xml文件进行配置广播接收者,有几点内容需要注意,首先由于我们在 ForceOfflineReceiver 里弹出了一个系统级别的对话框,因此必须要声明android.permission.SYSTEM_ALERT_WINDOW 权限。

当需要强制下线的时候,只需要调用如下代码即可

Intent intent = new Intent("com.example.broadcastbestpractice.FORCE_OFFLINE ");//com.example.broadcastbestpractice.FORCE_OFFLINE为自定义的广播接收者所接收的动作的类型。
sendBroadcast(intent);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息