【实战】广播实践,实现登录强制下线
2016-03-09 15:57
357 查看
本章学习了广播的机制,通过一个强制下线登陆用户的功能进行实战。
一、建立工具类ActivityCollector,实现关闭所有活动的功能,
ForceOfflineReceiver
八、最后我们只要设置下AndroidManifedt.xml就可以实现该功能了,主要要获取弹出框权限、注册活动、设置主活动、设置广播接收
至此,此次实现用户登录强制下线的功能已经全部实现,用到了UI设计、活动、SharePreferences存储、广播发送和接收等知识;运行效果图如下:
一、建立工具类ActivityCollector,实现关闭所有活动的功能,
package com.example.broadcastbestpractice; import com.example.broadcastbestpractice.LoginActivity; import Tools.ActivityCollector; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.view.WindowManager; public class ForceOfflineReceiver extends BroadcastReceiver { //重写BroadcastReceiver的onReceive方法,这里的Context一定要定义为final public void onReceive(final Context context, Intent intent) { // TODO Auto-generated method stub //定义弹出框! AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context); dialogBuilder.setTitle("Warning"); dialogBuilder.setMessage("You are force to be offline, Please try to login again!"); dialogBuilder.setCancelable(false);//设置不可取消,不然强制下线没有意义 //使用弹框的setPositiveButton方法设置对话框的确定按钮事件, //具体的操作:“销毁所有活动,跳转到其他页面,往intent中加入标签FLAG_ACTIVITY_NEW_TASK,然后启动新活动 dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub ActivityCollector.finishAll();//销毁所有活动! Intent intent = new Intent(context,LoginActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent);//必须要加上前面的 } }); AlertDialog alertDialog = dialogBuilder.create(); //设置AlertDialog的类型,保证在广播接收器中正常弹出 //系统提示。它总是出现在应用程序窗口之上。 //public static final int TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW +3; //需要注意的是这种类型的AlterDialog必须要在AndroidManifedt中进行注册,不然不能使用 alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); //调用AlterDialog的show方法显示弹出框 alertDialog.show(); } }
ForceOfflineReceiver
八、最后我们只要设置下AndroidManifedt.xml就可以实现该功能了,主要要获取弹出框权限、注册活动、设置主活动、设置广播接收
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcastbestpractice" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <!-- android.permission.SYSTEM_ALERT_WINDOW --> <!-- 允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".LoginActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity"></activity> <receiver android:name=".ForceOfflineReceiver" > <intent-filter> <action android:name="com.example.broadcastbestpractice.FORCE_OFFLINE"/> </intent-filter> </receiver> </application> </manifest>
至此,此次实现用户登录强制下线的功能已经全部实现,用到了UI设计、活动、SharePreferences存储、广播发送和接收等知识;运行效果图如下:
相关文章推荐
- HTML DOM appendChild() 方法
- 学习进度
- csharp:Chart
- C#与linux 时间戳互转
- 按钮背景效果切换 selector
- ListView
- javascript中callee与caller的用法和应用场景
- ClassLoader 详解及用途
- JS第11天
- 在powerdesigner中创建物理数据模型
- String、StringBuffer与StringBuilder之间区别
- AngularJs优化小记
- 查询时给某列赋值
- 复高斯白噪声的产生与叠加方法总结
- 自我介绍
- Java基础查漏补缺
- 使用TortoiseGit提交代码到Github.com上 详细步骤
- 105 - Construct Binary Tree from Preorder and Inorder Traversal
- C++细枝末节
- swift:使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据