Android連載25-強制下線具體實現

1、回顧

  • 上次連載寫了兩個類,一個類ActivityCollector.java用於管理全部的活動;一個類是BaseActivity.java做爲全部活動的父類;
  • 還有一個放在layout目錄中的登陸界面login.xml

2、登陸頁面的活動

  • 接下來寫一個登陸頁面的活動,繼承自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.125.1java

3、源碼:

相關文章
相關標籤/搜索