Android使用广播(BroadCast)实现强制下线的方法
程序员文章站
2023-12-20 15:34:16
本文实例讲述了android使用广播(broadcast)实现强制下线的方法。分享给大家供大家参考,具体如下:
使用广播简单模拟强制下线功能。
1、新建活动管理类
新...
本文实例讲述了android使用广播(broadcast)实现强制下线的方法。分享给大家供大家参考,具体如下:
使用广播简单模拟强制下线功能。
1、新建活动管理类
新建activity活动管理类,方便管理所有活动。
package com.example.broadcastpractice; import java.util.arraylist; import java.util.list; import android.app.activity; /** * 所有活动管理器 * @author yy * */ public class activitycollector { public static list<activity> activities = new arraylist<activity>(); /** * 添加活动 * @param activity */ public static void addactivity(activity activity){ if(!activities.contains(activity)){ activities.add(activity); } } /** * 移除活动 * @param activity */ public static void removeactivity(activity activity){ activities.remove(activity); } /** * 结束所有活动 */ public static void finishall(){ for(activity activity : activities){ if(!activity.isfinishing()){ activity.finish(); } } } }
2、新建活动基类
用于管理activity。
package com.example.broadcastpractice; import android.app.activity; import android.os.bundle; /** * 所有活动的基类 * @author yy * */ 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); } }
3、新建登陆布局
新建登陆布局login.xml,如下:
<?xml version="1.0" encoding="utf-8"?> <tablelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchcolumns="1" > <tablerow android:id="@+id/tablerow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="account:" /> <edittext android:id="@+id/account" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="input your account here" android:ems="10" > </edittext> </tablerow> <tablerow android:id="@+id/tablerow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="password:" /> <edittext android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:inputtype="textpassword" > </edittext> </tablerow> <tablerow android:id="@+id/tablerow3" android:layout_width="wrap_content" android:layout_height="wrap_content" > <button android:id="@+id/login" android:layout_span="2" android:layout_height="wrap_content" android:text="login" /> </tablerow> </tablelayout>
使用的是tablelayout,当然也可以使用其他布局,在该布局中,定义了登陆等相关信息。
4、新建登陆布局对应的activity
新建登陆布局对应的activity类,用于加载登陆布局:
package com.example.broadcastpractice; import android.content.intent; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.toast; public class loginactivity extends baseactivity { private edittext accountedit; private edittext passwordedit; private button loginbutton; @override protected void oncreate(bundle savedinstancestate) { //首先调用父类的方法 super.oncreate(savedinstancestate); //加载登陆布局 setcontentview(r.layout.login); //获取输入内容 accountedit = (edittext) findviewbyid(r.id.account); passwordedit = (edittext) findviewbyid(r.id.password); loginbutton = (button) findviewbyid(r.id.login); //注册按钮点击事件 loginbutton.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { string account = accountedit.gettext().tostring(); string password = passwordedit.gettext().tostring(); if(account.equals("yy") && password.equals("123456")){ //登陆成功 //启用mainactivity活动 intent intent = new intent(loginactivity.this,mainactivity.class); //启动 startactivity(intent); //当前活动销毁 finish(); }else{ //登陆失败 //清空内容 accountedit.settext(""); passwordedit.settext(""); toast.maketext(loginactivity.this, "登陆失败,请重新登陆!!", toast.length_short).show(); } } }); } }
在登陆按钮的监听事件中,当登陆验证通过,新新一个活动mainactivity,同时销毁当前活动,如果登陆失败,则清空所填内容。
5、mainactivity
package com.example.broadcastpractice; import android.content.intent; import android.os.bundle; import android.view.menu; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; /** * 继承baseactivity * @author yy * */ public class mainactivity extends baseactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //获取按钮 button forceoffline = (button) findviewbyid(r.id.force_offline); //注册事件 forceoffline.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { //启用广播 intent intent = new intent("com.example.broadcastpractice.force_offline"); //发送广播--标准广播 sendbroadcast(intent); } }); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; } }
下面是mainactivity对应的布局文件activity_main.xml:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <button android:id="@+id/force_offline" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="强制下线" /> </linearlayout>
即在该布局中有一按钮,当点击时,发送强制下线的广播,当然了我们接下来要创建广播接收器:
6、广播接收器
package com.example.broadcastpractice; import android.app.alertdialog; import android.content.broadcastreceiver; import android.content.context; import android.content.dialoginterface; import android.content.dialoginterface.onclicklistener; import android.content.intent; import android.view.windowmanager; /** * 强制下线广播接收器 * @author yy * */ public class forceofflinebroadcastreceiver extends broadcastreceiver { @override public void onreceive(final context context, intent intent) { //对话框 alertdialog.builder builder = new alertdialog.builder(context); builder.settitle("警告"); //正文 builder.setmessage("你已被强制下线,请重新登陆。"); //不可取消 builder.setcancelable(false); //按钮 builder.setpositivebutton("确定", new onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { //销毁所有活动 activitycollector.finishall(); //启动登陆活动 intent intent = new intent(context,loginactivity.class); //在广播中启动活动,需要添加如下代码 intent.addflags(intent.flag_activity_new_task); context.startactivity(intent); } }); alertdialog alterdialog = builder.create(); //添加对话框类型:保证在广播中正常弹出 alterdialog.getwindow().settype(windowmanager.layoutparams.type_system_alert); //对话框展示 alterdialog.show(); } }
7、全集配置文件androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcastpractice" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="14" android:targetsdkversion="17" /> <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="com.example.broadcastpractice.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> <!-- mainactivity活动 --> <activity android:name=".mainactivity"/> <!-- 广播接收器 --> <receiver android:name=".forceofflinebroadcastreceiver"> <intent-filter> <action android:name="com.example.broadcastpractice.force_offline"/> </intent-filter> </receiver> </application> </manifest>
8、效果展示
当输入错误时,验证不通过,显示上方左图。当输入正确时,验证通过,进入mainactivity界面,点击按钮,显示上方右图。当点击确定时,会跳到登陆界面。
希望本文所述对大家android程序设计有所帮助。
推荐阅读
-
Android使用广播(BroadCast)实现强制下线的方法
-
Android编程实现两个Activity相互切换而不使用onCreate()的方法
-
Android使用libgdx实现模拟方向键控制角色移动的方法
-
Android编程实现使用webView打开本地html文件的方法
-
Android使用criteria选择合适的地理位置服务实现方法
-
Android编程使用GestureDetector实现简单手势监听与处理的方法
-
Android使用GridView实现日历的方法
-
Android编程使用ListView实现数据列表显示的方法
-
Android编程使用HTTP协议与TCP协议实现上传文件的方法
-
Android强制下线功能实现的代码示例