您的位置:首页 > 其它

【实战】广播实践,实现登录强制下线

2016-03-09 15:57 357 查看
本章学习了广播的机制,通过一个强制下线登陆用户的功能进行实战。

一、建立工具类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存储、广播发送和接收等知识;运行效果图如下:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: