安卓学习之广播的实践
2017-07-01 23:37
169 查看
《第一行代码》的学习。
模仿一个登陆流程,登陆后,点击退出发送广播强制退出,返回到登陆界面
实现的时候基本有下面几个步骤
一个ActivityCollector类管理所有的活动
一个BaseActivity 类作为所有活动的父类
一个LoginActivity继承于一个BaseActivity
MainActivity继承于一个BaseActivity显示登陆成功的界面
ActivityCollector类
+ BaseActivity 类
LoginActivity类
MainActivity类
主配置xml,将LoginActivity设置为默认启动界面
一个简单的账号登录,模仿强制下线的Demo功能就完成了。主要是熟悉广播的试用
模仿一个登陆流程,登陆后,点击退出发送广播强制退出,返回到登陆界面
实现的时候基本有下面几个步骤
一个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功能就完成了。主要是熟悉广播的试用
相关文章推荐
- 安卓的广播机制学习
- 安卓广播学习整理
- 安卓学习第六天(广播,服务,进程,线程等)
- Android学习总结(八)———— 广播的最佳实践(实现强制下线功能)
- 学习日记--关于安卓广播数据传递
- 安卓学习--广播
- 【安卓学习】4.碎片(Fragment)实践---一个简单的新闻应用。
- 阿里物联网套件-服务端SDK学习实践(基础篇-13发布广播消息)
- 安卓学习之路之广播
- 分享《21个项目玩转深度学习:基于TensorFlow的实践详解》PDF+源代码
- Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- Castle ActiveRecord学习实践(2):构建配置信息
- Castle ActiveRecord学习实践(6):延迟加载和使用Where子句
- Castle ActiveRecord学习实践(8):数据有效性的验证
- TCP-IP学习笔记_卷1_第12章_多播和广播
- Castle ActiveRecord学习实践(7):使用HQL查询
- Castle ActiveRecord学习实践(2):构建配置信息
- Castle ActiveRecord学习实践(5):实现Many–Many关系的映射
- Castle ActiveRecord学习实践(6):延迟加载和使用Where子句
- 动态代理实践的学习笔记