广播—实现强制下线以及记住密码功能

一、登录界面的xml文件

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 >
        <TextView 
            android:layout_height="wrap_content"
            android:text="Account:"/>
        <EditText 
            android:id="@+id/account"
            android:layout_height="wrap_content"
            android:hint="Input Your account"/>
    </TableRow>
    
     <TableRow >
        <TextView 
            android:layout_height="wrap_content"
            android:text="Password:"/>
        <EditText 
            android:id="@+id/password"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:hint="Input Your Password"
           />
    </TableRow>
       <TableRow >
           <CheckBox 
               android:id="@+id/remeber_pass"
               android:layout_height="wrap_content"/>
           <TextView 
               android:layout_height="wrap_content"
               android:text="Remeber password"/>
       </TableRow>
       

    <TableRow >
        <Button 
            android:id="@+id/login"
            android:layout_height="wrap_content"
            android:layout_span="2"
            android:text="Login"/>
    </TableRow>

</TableLayout>

二、管理所有活动的类  ActivityCollector.java

package com.example.broadcastbestpractice;

import java.util.ArrayList;

import android.app.Activity;

public class ActivityCollector {
    //定义活动集合类
    public static ArrayList<Activity> activities=new ArrayList<Activity>();
    //添加活动
    public static void addActivity(Activity activity){
        activities.add(activity);
    }
    //移除活动
    public static void removeActivit(Activity activity) {
        // TODO Auto-generated method stub
        activities.remove(activity);
    }
    //结束所有的活动
    public  static void finishAll(){
        for(Activity activity:activities){
            if(!activity.isFinishing()){
                activity.finish();
            }
        }
    }
}

三、基类 BaseActivity.java

package com.example.broadcastbestpractice;

import android.app.Activity;
import android.os.Bundle;

//创建基础类,是在创建活动的时候加入集合,销毁活动的时候移除活动
public class BaseActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            ActivityCollector.addActivity(this);
        }
        @Override
        protected void onDestroy() {
        // TODO Auto-generated method stub
            super.onDestroy();
            ActivityCollector.removeActivit(this);
        }
}

四、强制下线广播接收器 ForceofflineReceiver.java

package com.example.broadcastbestpractice;

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.Window;
import android.view.WindowManager;

public class ForceofflineReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(final Context context, Intent arg1) {
        // TODO Auto-generated method stub
        //创建一个警告框
        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 arg0, int arg1) {
                // TODO Auto-generated method stub
                //结束所有的活动
                ActivityCollector.finishAll();
                Intent intent=new Intent(context,LoginActivity.class);
                //告诉activity使用自己的任务栈来维护界面,因为自己没有界面,没有任务栈创建
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
            }
        });
        
        AlertDialog alertDialog=dialogBuilder.create();
        alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        alertDialog.show();
    }

}

五、登录逻辑 LoginActivity.java

package com.example.broadcastbestpractice;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends BaseActivity{
    
    private EditText accountEdit;
    private EditText passwordEdit;
    private Button login;
    private CheckBox remeberPass;
    private SharedPreferences pref;
    private SharedPreferences.Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        //数据存储
        pref=PreferenceManager.getDefaultSharedPreferences(this);
        //账号
        accountEdit=(EditText) findViewById(R.id.account);
        //密码
        passwordEdit=(EditText) findViewById(R.id.password);
        //记住密码
        remeberPass=(CheckBox) findViewById(R.id.remeber_pass);
        //登录
        login=(Button) findViewById(R.id.login);
        boolean isRemeber=pref.getBoolean("remember_password", false);
        //记住密码,则使用保存的账户和密码填充
        if(isRemeber){
            String account=pref.getString("account", "");
            String password=pref.getString("password", "");
            accountEdit.setText(account);
            passwordEdit.setText(password);
            remeberPass.setChecked(true);
        }
        login.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                String account=accountEdit.getText().toString();
                String password=passwordEdit.getText().toString();
                //如果账号,密码正确
                if("Tom".equals(account)&&"123456".equals(password)){
                    editor=pref.edit();
                    //记住密码,则保存账号和密码
                    if(remeberPass.isChecked()){
                        editor.putBoolean("remember_password", true);
                        editor.putString("account", account);
                        editor.putString("password", password);
                    }else{
                        //否则清除
                        editor.clear();
                    }
                    editor.commit();
                    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();
                }
            }
        });
    }
    private SharedPreferences getSharedPreferences(LoginActivity loginActivity) {
        // TODO Auto-generated method stub
        return null;
    }
}

六、

package com.example.broadcastbestpractice;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button forceline=(Button) findViewById(R.id.force_offine);
        forceline.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                //发送广播
                Intent intent=new Intent("com.example.broadcastbestpractice.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;
    }
    
}

 

posted @ 2016-03-22 16:23  好人难寻  阅读(323)  评论(0编辑  收藏  举报