广播的实现--实现强制下线功能
2016-01-17 16:01
357 查看
1、登录部分内容(直接上代码咯)
BaseActivity
ActivityCollector
LoginActivity
BroadOfflineReceiver
MainActivity
配置文件
BaseActivity
/** * 作为所有活动的父类 */ public class BaseActivity extends Activity{ @Override protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); ActivityCollector.addActivity(this); } @Override protected void onDestroy(){ super.onDestroy(); ActivityCollector.removeActivity(this); } }
ActivityCollector
/** * 用于管理所有活动*/ public class ActivityCollector { public static List<Activity> activities=new ArrayList<Activity>(); public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishAll(){ for(Activity activity:activities){ if(!activity.isFinishing()){ activity.finish(); } } } }
LoginActivity
public class LoginActivity extends BaseActivity { private EditText accountEdit; private EditText passwordEdit; private Button login; private CheckBox rememberPass; private SharedPreferences pref; private SharedPreferences.Editor editor;//获取SharedPreferences.Editor对象 @Override protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); setContentView(R.layout.login); //获取SharedPreferences对象,接受一个context参数this pref= PreferenceManager.getDefaultSharedPreferences(this); //控件初始化 accountEdit= (EditText) findViewById(R.id.account); passwordEdit= (EditText) findViewById(R.id.password); login= (Button) findViewById(R.id.loginBtn); rememberPass=(CheckBox)findViewById(R.id.remember_pass); //用于判断复选框是否被勾选 boolean isRemember=pref.getBoolean("remember_password",false); if(isRemember){ //将账号和密码都设置到文本框中 String account=pref.getString("account",""); String password=pref.getString("password",""); accountEdit.setText(account); passwordEdit.setText(password); rememberPass.setChecked(true); } login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String account=accountEdit.getText().toString();//获取账号输入框内容 String password=passwordEdit.getText().toString();//获取密码框输入的内容 //如果账号是admin且密码是123456,就认为登录成功 if(account.equals("admin")&&password.equals("123456")){ editor=pref.edit(); //检查复选框是否被选中 if(rememberPass.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,"账号或密码输入错误!请重新输入",Toast.LENGTH_LONG).show(); } } }); } }
BroadOfflineReceiver
public class BroadOfflineReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { AlertDialog.Builder dialogBuilder=new AlertDialog.Builder(context); dialogBuilder.setTitle("注意"); dialogBuilder.setMessage("你被强制下线,请重新登录"); dialogBuilder.setCancelable(false); dialogBuilder.setPositiveButton("确定", new DialogInterface.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(); } }
MainActivity
public class MainActivity extends BaseActivity { @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 View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent("demo4.broadcastlogin.FORCE_OFFLINE"); sendBroadcast(intent); } }); } }
配置文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="demo4.broadcastlogin" > <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".LoginActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity"> </activity> <receiver android:name=".BroadOfflineReceiver"> <intent-filter> <action android:name="demo4.broadcastlogin.FORCE_OFFLINE"/> </intent-filter> </receiver> </application> </manifest>
相关文章推荐
- 从CVPR 2014看计算机视觉领域的最新热点
- 012-httpd2.4(CentOS 7) new features config
- C++操作文本
- codevs 1690 开关灯 线段树水题
- HTTP和SOAP完全就是两个不同的协议
- op07-SELinux op
- Spring2.5学习3.3_@Autowire注解实现手动装配
- linux 文件夹操作
- hdu2161 Primes
- 编译PHP中的扩展时遇到的问题及解决方法
- JavaScript框架继承写法
- python使用yield来减少内存开销
- Matlab中使用文本文件(.txt)进行数据存取的技巧总结(1)
- Integer valueOf
- 哈希表和二叉树?
- 一天结束后,如何复盘?
- 3、React中的状态(this.state)
- centos添加路由
- Callable拿到线程执行结果
- MFC 打开文件夹选择框并获取文件夹路径