安卓学习之广播的实践
来源:互联网 发布:超级记忆训练软件 编辑:程序博客网 时间:2024/06/06 08:23
《第一行代码》的学习。
模仿一个登陆流程,登陆后,点击退出发送广播强制退出,返回到登陆界面
- 实现的时候基本有下面几个步骤
- 一个ActivityCollector类管理所有的活动
- 一个BaseActivity 类作为所有活动的父类
- 一个LoginActivity继承于一个BaseActivity
- MainActivity继承于一个BaseActivity显示登陆成功的界面
- ActivityCollector类
public class ActivityCollector{ public static List<Activity> activities = new ArrayList<Activity>(); public static void addActivity(Activity activity) { activities.add(activity); } public static void removerActivity(Activity activity) { activities.remove(activity); } public static void finishAll() { for(Activity activity: activities) { if (!activity.isFinishing()) { activity.finish(); } } }}
+ BaseActivity 类
public class BaseActivity extends AppCompatActivity{ private ForceOfflineReceiver receiver; @Override protected void onCreate(Bundle savedInstaceState) { super.onCreate(savedInstaceState); ActivityCollector.addActivity(this); } @Override protected void onResume() { super.onResume(); //这里注册一个广播,用于接收下线的消息 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.magikid.broadcastbestpractice.FORCE_OFFLINE"); receiver= new ForceOfflineReceiver(); registerReceiver(receiver, intentFilter); } @Override protected void onPause() { super.onPause(); //取消注册 if(receiver != null) { unregisterReceiver(receiver); receiver = null; } } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removerActivity(this); } class ForceOfflineReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Warning"); builder.setMessage("You 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 intent = new Intent(context, LoginActivity.class); context.startActivity(intent); } }); builder.show(); } }}
- LoginActivity类
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.activity_login); accountEdit = (EditText)findViewById(R.id.account); passwordEdit = (EditText)findViewById(R.id.password); login = (Button)findViewById(R.id.login); login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String account = accountEdit.getText().toString(); String password = passwordEdit.getText().toString(); if (account.equals("admin") && password.equals("123456")) { 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(); } } }); }}//对应的layout <TextView android:layout_width="90dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textSize="18sp" android:text="Password"/> <EditText android:id="@+id/password" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical"/> </LinearLayout> <Button android:id="@+id/login" android:layout_width="match_parent" android:layout_height="60dp" android:text="Login" />
- 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("com.magikid.broadcastbestpractice.FORCE_OFFLINE"); sendBroadcast(intent); } }); }//对应的layout<Button android:id="@+id/force_offline" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send force offline broadcast" />
主配置xml,将LoginActivity设置为默认启动界面
<activity android:name=".MainActivity"> </activity> <activity android:name=".LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter>> </activity>
一个简单的账号登录,模仿强制下线的Demo功能就完成了。主要是熟悉广播的试用
阅读全文
0 0
- 安卓学习之广播的实践
- 安卓学习之路之广播
- 安卓学习--广播
- 安卓的广播机制学习
- 安卓广播之各类型广播的记录
- 【Android】安卓学习笔记之广播(三)发送标准广播和有序广播
- 安卓广播学习整理
- 安卓之系统广播
- 安卓之Broadcast广播
- 【Android】安卓学习笔记之广播(四)使用本地广播
- 安卓开发之广播的使用(Broadcast)
- 菜鸟的安卓实习之路----android广播(3)自定义广播
- 安卓广播机制学习笔记
- xamarin学习笔记A08(安卓广播)
- 安卓四大组件之--广播接受者
- 安卓广播之理论篇
- 安卓开发之注册静态广播
- 安卓开发之发送自定义广播
- 如何生成每秒百万级别的 HTTP 请求
- 利用安卓天天模拟器进行HBuilder App开发
- ubuntu 安装Gogland
- C++/C/JAVA/Python之间的区别?
- 2018保研大战要遵守的7大规则
- 安卓学习之广播的实践
- Docker——安装部署(二)
- Python自定制tail命令,tail -f 功能小解
- 如何用C++实现String类?
- 谷歌图像识别 API
- 多线程用到类函数中
- 考研vs保研? 看华中师大学子谈保研、考研如何抉择?
- Quartus II 15.0仿真入门
- 洛谷 P1345 [USACO5.4]奶牛的电信Telecowmunication