kotlin实现强制下线功能

作者:代码没写完 时间:2023-06-13 12:35:08 

强制下线是需要关闭所有的活动,先创建一个类来管理所有的活动。


class ActivityCollector {
 //var activities :MutableList<Activity>=MutableList<Activity>()
 companion object{
   val activities = ArrayList<Activity>()
   fun addActivity( activity:Activity){
     activities.add(activity)
   }
   fun removeActivity(activity:Activity){
     activities.remove(activity)
   }
   fun finsishAll(){
     for(activity:Activity in activities){
       if(!activity.isFinishing){
         activity.finish()
       }
     }
     activities.clear()
   }
 }
}

然后建立一个所有活动的父类


open class BaseActivity : AppCompatActivity(){
 var activityCollector=ActivityCollector()
 lateinit var receiver:ForceOfflineReceiver
 override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
   super.onCreate(savedInstanceState, persistentState)
   ActivityCollector.addActivity(this)
   //activityCollector.addActivity(this)
 }
 override fun onResume() {
   super.onResume()
   var inetnefilter:IntentFilter=IntentFilter()
   inetnefilter.addAction("FORCE_FOOLINE")
   receiver=ForceOfflineReceiver()
   registerReceiver(receiver,inetnefilter)
 }
 override fun onPause() {
   super.onPause()
   if(receiver!=null){
     unregisterReceiver(receiver)
     // receiver=null
   }
 }
 override fun onDestroy() {
   super.onDestroy()
   ActivityCollector.removeActivity(this)
 }
 open class ForceOfflineReceiver : BroadcastReceiver(){
   override fun onReceive(context: Context, intent: Intent?) {
     var builder :AlertDialog.Builder=AlertDialog.Builder(context)
     builder.setTitle("Warning")
     builder.setMessage("you are forced to be offline .please try to login again")
     builder.setCancelable(false)
     builder.setPositiveButton("ok",object :DialogInterface.OnClickListener{
       override fun onClick(dialog: DialogInterface?, which: Int) {
         ActivityCollector.finsishAll()
         var intent=Intent(context,LoginActivity::class.java)
         context.startActivity(intent)
       }
     })
     builder.show()
   }
 }
}

建立一个登录的布局文件


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
<LinearLayout
 android:layout_width="match_parent"
 android:layout_height="60dp"
 android:orientation="horizontal">
 <TextView
   android:layout_width="90dp"
   android:layout_height="wrap_content"
   android:layout_gravity="center_vertical"
   android:textSize="18sp"
   android:text="account:"
   />
 <EditText
   android:id="@+id/account"
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:layout_gravity="center_vertical"
   />
</LinearLayout>
 <LinearLayout
   android:layout_width="match_parent"
   android:layout_height="60dp"
   android:orientation="horizontal">
   <TextView
     android:layout_width="90dp"
     android:layout_height="wrap_content"
     android:layout_gravity="center_vertical"
     android:textSize="18sp"
     android:text="password:"
     />
   <EditText
     android:id="@+id/password"
     android:layout_width="0dp"
     android:layout_height="wrap_content"
     android:layout_weight="1"
     android:layout_gravity="center_vertical"
     android:inputType="textPassword"
     />
 </LinearLayout>
 <Button
   android:id="@+id/login"
   android:layout_width="match_parent"
   android:layout_height="60dp"
   android:text="Login"
   />
</LinearLayout>

然后编写一个登录的活动,这里写了一个简单的登录,密码正确的话就进入主页面,否则给出提示。


class LoginActivity:BaseActivity(){
  lateinit var accountEdid:EditText
  lateinit var passwordEdit :EditText
   lateinit var login:Button
 override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.login)
   accountEdid=findViewById(R.id.account)
   passwordEdit=findViewById(R.id.password)
   login=findViewById(R.id.login)
   login.setOnClickListener(View.OnClickListener {
     var account =accountEdid.text.toString()
     var password=passwordEdit.text.toString()
     if(account.equals("admin")&&password.equals("123")){
       var intent:Intent=Intent(this, MainActivity::class.java)
       startActivity(intent)
       finish()
     }else{
       Toast.makeText(this,"账号或密码错误",Toast.LENGTH_SHORT).show()
     }
   })
 }
}

然后修改一下mainactivity的代码


class MainActivity : BaseActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)
   var forceOffline :Button =findViewById(R.id.force_offline)
   forceOffline.setOnClickListener(View.OnClickListener {
     var intent:Intent=Intent("FORCE_FOOLINE")
     sendBroadcast(intent)
   })
 }
}

最后对AndroidManifest.xml修改,把主活动设置更换一下。


<application
 android:allowBackup="true"
 android:icon="@mipmap/ic_launcher"
 android:label="@string/app_name"
 android:roundIcon="@mipmap/ic_launcher_round"
 android:supportsRtl="true"
 android:theme="@style/AppTheme">
 <activity android:name=".MainActivity">
 </activity>
 <activity android:name=".LoginActivity" android:launchMode="singleTask">
   <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
 </activity>
</application>

来源:https://blog.csdn.net/weixin_40119478/article/details/80525686

标签:kotlin,强制下线
0
投稿

猜你喜欢

  • springboot vue组件开发实现接口断言功能

    2023-11-12 10:26:53
  • IDEA编译乱码Build Output提示信息乱码

    2023-08-07 12:14:35
  • 如何利用Java AWT 创建一个简易计算器

    2023-04-22 03:04:08
  • SpringSecurity+Redis认证过程小结

    2021-07-21 11:38:11
  • Java Thread 类和Runnable 接口详解

    2023-11-10 20:16:00
  • Spring-Data-JPA整合MySQL和配置的方法

    2023-10-29 10:19:41
  • Java序列化与反序列化的实例分析讲解

    2022-09-16 05:58:39
  • Android使用setContentView实现页面的转换效果

    2021-07-30 15:13:32
  • Eclipse IDE可支持Java 14編程

    2022-09-06 10:14:43
  • mybatis之如何获取表中某一列的最大值

    2022-03-26 08:38:53
  • JAVA集合框架Map特性及实例解析

    2021-06-05 02:23:39
  • C#操作RabbitMQ的完整实例

    2022-05-05 19:41:05
  • 简单谈谈Java 中的线程的几种状态

    2023-05-10 13:29:45
  • 关于android连续点击出现多个Activity界面的解决方法

    2023-03-29 12:20:43
  • Java动态线程池插件dynamic-tp集成zookeeper

    2023-11-25 03:41:38
  • spring MVC实践需要注意的地方

    2023-02-07 00:33:07
  • Android通过AIDL在两个APP之间Service通信

    2022-04-15 23:58:27
  • C#实现单例模式的6种方法小结

    2023-09-13 21:02:57
  • flutter material widget组件之信息展示组件使用详解

    2023-06-22 08:45:35
  • Java 添加超链接到 Word 文档方法详解

    2023-01-29 08:49:30
  • asp之家 软件编程 m.aspxhome.com