一、回顧 上次連載寫了兩個類,一個類ActivityCollector.java用於管理所有的活動;一個類是BaseActivity.java作為所有活動的父類; 還有一個放在layout目錄中的登錄界面login.xml 二、登錄頁面的活動 接下來寫一個登錄頁面的活動,繼承自BaseActivit ...
一、回顧
- 上次連載寫了兩個類,一個類
ActivityCollector.java
用於管理所有的活動;一個類是BaseActivity.java
作為所有活動的父類; - 還有一個放在layout目錄中的登錄界面
login.xml
二、登錄頁面的活動
- 接下來寫一個登錄頁面的活動,繼承自
BaseActivity.java
package com.example.broadcastbestpractice; import android.content.Intent; import android.os.Bundle; import android.view.View; 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 login; @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); login = (Button) findViewById(R.id.login); login.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { String account =accountEdit.getText().toString(); String password = passwordEdit.getText().toString(); //如果賬號是admin,密碼是12345,就認為登錄成功 if(account.contentEquals("admin") && password.equals("12345")) { Intent intent = new Intent(LoginActivity.this,MainActivity.class); startActivity(intent); finish(); }else { Toast.makeText(LoginActivity.this,"account or password is invalid",Toast.LENGTH_SHORT).show(); } } }); } }
- 使用
findViewById
方法分別獲取輸入框以及登錄按鈕的實例 - 然後設置點擊事件:先判斷賬號和密碼對不對,對了就是用intent實例進入到主活動中;錯了就重新進入登錄頁面,並且列印出一條提示語。
- 接著改造一下主界面,當然加上強制下線功能就行,不要其他花里胡哨的。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/force_offline" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send force offline broadcast" /> </LinearLayout>
- 非常簡單,就是加了一個按鈕
- 接下來修改主活動的邏輯
package com.example.broadcastbestpractice; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { @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.broadcastbestpractice.FORCE_OFFLINE"); sendBroadcast(intent); } }); } }
- 在點擊事件裡面,我們發送了
com.example.broadcastbestpractice.FORCE_OFFLINE
廣播,用於通知程式強制用戶下線。 - 這說明強制用戶下線的功能,應該寫在接收器中,不寫在具體某個活動中,這樣發出“下線”廣播的時候,就能完成下線操作了。
- 接下來創建一個廣播接收器
package com.example.broadcastbestpractice; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.view.WindowManager; import android.content.DialogInterface.OnClickListener;; public class ForceOfflineReceiver extends BroadcastReceiver{ @Override public void onReceive(final Context context,Intent intent) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context); dialogBuilder.setTitle("Warning"); dialogBuilder.setMessage("You are forced to be offline,Please try to login again."); dialogBuilder.setCancelable(false); //下麵這句改了 dialogBuilder.setPositiveButton("OK", 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);//重新啟動LoginActivity } }); AlertDialog alertDialog = dialogBuilder.create(); //需要設置AlertDialog的類型,保證廣播接收器中可以正常彈出 alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); alertDialog.show(); } }
25.1
三、源碼:
- BroadcastBestPractice
- https://github.com/ruigege66/Android/tree/master/BroadcastBestPractice
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客園:https://www.cnblogs.com/ruigege0000/
- 歡迎關註微信公眾號:傅里葉變換,個人賬號,僅用於技術交流,後臺回覆“禮包”獲取Java大數據學習視頻禮包