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 类作为所有活动的父类,代码如下所示:
然后让所有的活动都继承自BaseActivity
接下来我们就需要创建一个广播接收器,新建 ForceOfflineReceiver继承自 BroadcastReceiver,代码如下所示:
由于我们是在广播接收器里启动活动的,因此一定要给Intent 加入FLAG_ACTIVITY_NEW_TASK 这个标志。最后,还需要把对话框的类型设为TYPE_SYSTEM_ALERT,不然它将无法在广播接收器里弹出。
接下来我们还需要对 AndroidManifest.xml文件进行配置广播接收者,有几点内容需要注意,首先由于我们在 ForceOfflineReceiver 里弹出了一个系统级别的对话框,因此必须要声明android.permission.SYSTEM_ALERT_WINDOW 权限。
当需要强制下线的时候,只需要调用如下代码即可
实现类似于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);
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories