网站建设文化服务,平面广告设计培训哪里学,石家庄住房和城乡建设部网站,行业前10的网站建设公安卓开发_广播机制_广播的最佳实践#xff1a;实现强制下线功能 ActivityCollector类用于管理所有的ActivityBaseActivity类作为所有Activity的父类创建一个LoginActivity来作为登录界面布局LoginActivity 在MainActivity中加入强制下线功能布局MainActivity在BaseActivity中注… 安卓开发_广播机制_广播的最佳实践实现强制下线功能 ActivityCollector类用于管理所有的ActivityBaseActivity类作为所有Activity的父类创建一个LoginActivity来作为登录界面布局LoginActivity 在MainActivity中加入强制下线功能布局MainActivity在BaseActivity中注册广播接收将LoginActivity注册为主Activity 参考 ActivityCollector类用于管理所有的Activity
object ActivityCollector {private val activities ArrayListActivity()fun addActivity(activity: Activity) {activities.add(activity)}fun removeActivity(activity: Activity) {activities.remove(activity)}fun finishAll() {for (activity in activities) {if (!activity.isFinishing) {activity.finish()}}activities.clear()}
}BaseActivity类作为所有Activity的父类
open class BaseActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)ActivityCollector.addActivity(this)}override fun onDestroy() {super.onDestroy()ActivityCollector.removeActivity(this)}
}创建一个LoginActivity来作为登录界面
布局
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:orientationverticalandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentLinearLayoutandroid:orientationhorizontalandroid:layout_widthmatch_parentandroid:layout_height60dpTextViewandroid:layout_width90dpandroid:layout_heightwrap_contentandroid:layout_gravitycenter_verticalandroid:textSize18spandroid:textAccount: /EditTextandroid:idid/accountEditandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:layout_gravitycenter_vertical //LinearLayoutLinearLayoutandroid:orientationhorizontalandroid:layout_widthmatch_parentandroid:layout_height60dpTextViewandroid:layout_width90dpandroid:layout_heightwrap_contentandroid:layout_gravitycenter_verticalandroid:textSize18spandroid:textPassword: /EditTextandroid:idid/passwordEditandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:layout_gravitycenter_verticalandroid:inputTypetextPassword //LinearLayoutButtonandroid:idid/loginandroid:layout_width200dpandroid:layout_height60dpandroid:layout_gravitycenter_horizontalandroid:textLogin /
/LinearLayoutLoginActivity
class LoginActivity : AppCompatActivity() {private lateinit var binding: ActivityLoginBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding ActivityLoginBinding.inflate(layoutInflater)setContentView(binding.root)binding.login.setOnClickListener {val account binding.accountEdit.text.toString()val password binding.passwordEdit.text.toString()if(account admin password 123456){val intent Intent(this, MainActivity::class.java)startActivity(intent)finish()}else{Toast.makeText(this, account or password is invaild, Toast.LENGTH_SHORT).show()}}}
}在MainActivity中加入强制下线功能
布局
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:orientationverticalandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent Buttonandroid:idid/forceOfflineandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textSend force offline broadcast /
/LinearLayout MainActivity
class MainActivity : BaseActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)binding.forceOffline.setOnClickListener {val intent Intent(com.example.broadcastbestpractice.FORCE_OFFLINE)sendBroadcast(intent)}}
}在BaseActivity中注册广播接收
open class BaseActivity : AppCompatActivity() {private lateinit var receiver: ForceOfflineReceiveroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)ActivityCollector.addActivity(this)}override fun onResume() {super.onResume()val intentFilter IntentFilter()intentFilter.addAction(com.example.broadcastbestpractice.FORCE_OFFLINE)receiver ForceOfflineReceiver()registerReceiver(receiver, intentFilter)}override fun onPause() {super.onPause()unregisterReceiver(receiver)}override fun onDestroy() {super.onDestroy()ActivityCollector.removeActivity(this)}inner class ForceOfflineReceiver: BroadcastReceiver(){override fun onReceive(context: Context, intent: Intent) {AlertDialog.Builder(context).apply{setTitle(Warining)setMessage(You are forced to be offline. Please try to login again.)setCancelable(false)setPositiveButton(OK) { _, _ -ActivityCollector.finishAll()val i Intent(context, LoginActivity::class.java)context.startActivity(i)}show()}}}
}将LoginActivity注册为主Activity
参考
郭霖. 《第一行代码 Android 第3版》