一个登陆界面,错误输入用户名或密码,吐司提示输入有误,正确输入用户名跟密码(代码部分为写死admin/123123),跳转主界面
主界面一个按钮,点击强制下线,弹出一对话框要求重新登陆,点击ok,再次回到主界面
逻辑:写一个登陆界面布局,写一activity管理类,写一BaseActivity一创建activity就放入activity管理类中,写登陆界面代码,点击登陆按钮获得所输入的内容,若与要求一致跳主界面,错误吐司提示,跳到主界面后,点击按钮,发送一广播,写一广播,广播收到后,弹一对话框强制下线,点back也不能退出,只能点ok,跳到登陆界面。注意这是在广播接收器中跳主界面记得加Flag,弹对话框,搞window什么的 具体看代码
下面贴代码
先写登陆界面布局
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:stretchColumns="1"> <TableRow> <TextView android:layout_height="wrap_content" android:text="Account:" /> <EditText android:id="@+id/et_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/et_password" android:layout_height="wrap_content" android:inputType="textPassword" /> </TableRow> <TableRow> <Button android:id="@+id/btn_login" android:layout_height="wrap_content" android:layout_span="2" android:text="Login" /> </TableRow> </TableLayout>
写一个Activity管理类,方便管理
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 != null) { activity.finish(); } } } }
再写一BaseActivity在其创建时添加到管理Activity的管理类中,销毁时撤出
public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityCollector.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); } }
登陆界面代码继承自BaseActivity
public class LoginActivity extends BaseActivity { private EditText et_account; private EditText et_password; private Button btn_login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); et_account = (EditText) findViewById(R.id.et_account); et_password = (EditText) findViewById(R.id.et_password); btn_login = (Button) findViewById(R.id.btn_login); btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String account = et_account.getText().toString(); String password = et_password.getText().toString(); if(account.equals("admin")&&password.equals("123123")) { Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); }else { Toast.makeText(LoginActivity.this,"account or password is invalid",Toast.LENGTH_SHORT).show(); } } }); } }输入正确用户名跟密码跳转主界面,主界面布局仅为一个按钮,省略。主界面代码,点击按钮发送一条广播
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_force_offline).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.beibei.broadcastbestpractice.forceoffline"); sendBroadcast(intent); } }); } }广播接收器收到广播后,弹出一个对话框,要求下线重新登陆,点击ok返会登陆界面
public class ForceOfflineReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Warning"); builder.setMessage("u are forced to be offline,please try to login again"); builder.setCancelable(false); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCollector.finishAll(); Intent intent1 = new Intent(context, LoginActivity.class); intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//在广播接收器中开起activity要给intent加flag context.startActivity(intent1); } }); AlertDialog alertDialog = builder.create(); alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); alertDialog.show(); } }然后配置文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sks.broadcastbestpractice" > <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=".activity.MainActivity" android:label="@string/app_name"></activity> <activity android:name=".activity.LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".activity.BaseActivity"></activity> <receiver android:name=".broadcast.ForceOfflineReceiver"> <intent-filter> <action android:name="com.beibei.broadcastbestpractice.forceoffline" /> </intent-filter> </receiver> </application> </manifest>