移动应用服务器端开发基于JSP技术 -2017 BroadcastReceiver实验报告
BroadcastReceiver
广播接收器BoardcastReceiver
PAGE5
实训实验报告
实训(实验)项目:
广播接收器使用
实验目的
学习广播接收器相关属性
学习广播接收器相关属性与使用
实训实验设计器材、步骤、结论
简介
广播接收器可以自由地对自己感兴趣的广播进行注册这样当有相应的广播发出时广播接收器就能够收到该广播并在内部处理相应的逻辑。
实验目的实现强制下线提醒广播
任务借助本章节中所学习的广播知识来实现强制下线功能。
步骤1.在MainActivity所处的文件夹点击右键新建一个名为ActivityCollector
.java的类文件用于管理所有的活动代码如下publicclassActivityCollector{publicstaticList<Activity>activities=newArrayList<Activity>();publicstaticvoidaddActivity(Activityactivity){activities.add(activity);
}publicstaticvoidremoveActivity(Activityactivity){activities.remove(activity);
}
publicstaticvoidfinishAll(){for(Activityactivity:activities){if(!activity.isFinishing()){activity.finish();
}
}
}
}
步骤2 在MainActivity所处的文件夹点击右键新建一个名为 LoginActivity.java的登录界面活动代码如下所示publicclassLoginActivityextendsBaseActivity{privateE ditTextaccountE dit;privateE ditTextpasswordE dit;privateButtonlogin;
@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);accountEdit=(EditText)findViewById(R.id.account);passwordEdit=(EditText)findViewById(R.id.password);l ogin=(Butto n)findViewByI d(R.id.l ogin);login.setOnClickListener(newView.OnClickListener(){
@OverridepublicvoidonClick(Viewv){
Stringaccount=accountE dit.getText().toString();
Stringpas sword=passwordE dit.getText().toString();
if(account.equals("123456")&&password.equals("123456")){
Intentintent=newIntent(LoginActivity.this,MainActivity.class);startActivity(intent);fi n i s h();
}else{
Toast.makeText(LoginActivity.this,"账号或密码错误",Toast.LE NGTH_SHORT).show();}
}
});
}
}
步骤3 新建一个布局文件activity_login.xml文件代码如下
<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">
<LinearLayoutandroid:orientation="horizontal"android:layout_width="match_parent"android:layout_height="60dp">
<TextViewandroid:layout_width="90dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"
android:layout_gravity="center_vertical"android:inputType="textPassword"/>
</LinearLayout>
<Butto nandroid:id="@+id/login"android:layout_width="match_parent"android:layout_height="60dp"android:text="登录"/>
</LinearLayout>
步骤4修改activity_main布局文件代码添加一个发送强制下线广播的按钮代码如下所示
<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">
<Butto nandroid:id="@+id/offline"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="发送强制下线广播"/>
</LinearLayout>
步骤5 修改MainActivity中的代码如下所示publicclassMainActivityextendsBaseActivity{
@OverrideprotectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
ButtonforceOffline=(Button)findViewByI d(R.id.offline);forceOffline.setOnClickListener(newView.OnClickListener(){
@OverridepublicvoidonClick(Viewv){
Intentintent=newIntent("com.example.broadcastpractice.FORCE_OFFLINE");sendBroadcast(intent);
}
});
}
}
步骤6修改BaseActivity中的代码如下所示publicclassBaseActivityextendsAppCompatActivity{privateForceOfflineReceiverreceiver;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}
@OverrideprotectedvoidonResume(){super.onResume();
IntentFilterintentFilter=newIntentFilter();intentFilter.addAction("com.example.broadcastpractice.FORCE_OFFLINE");receiver=newForceOfflineReceiver();
registerReceiver(receiver,intentFilter);
}
@OverrideprotectedvoidonPause(){super.onPause();if(receiver!=null){unregisterReceiver(receiver);receiver=null;
}
}
@OverrideprotectedvoidonDestroy(){super.onDestroy();
ActivityCollector.removeActivity(this);
}classForceOfflineReceiverextendsBroadcastReceiver{
@OverridepublicvoidonReceive(finalContextc ontext,Intentintent){
AlertDialog.Builderbuilder=newAlertDialog.Builder(context);
//标题builder.setTitle("强制下线通知");
//正文builder.setMessage("您的账号已在别地登录如不是本人操作请尽快修改密码");//不可取消builder.setCancelable(false);
//按钮
builder.setPositiveButton("确认",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){
ActivityCollector.finishAll();
Intentintent=newIntent(context,LoginActivity.class);context.startActivity(intent);
}
});builder.show();
}
}
}
步骤7修改AndroidManifest.xml代码如下所示
<manifestxmlns:android="/apk/res/android"package="com.example.broadcastbestpractice">
<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme">
<activityandroid:name=".MainActivity"/>
<activityandroid:name=".LoginActivity">
<intent-filter>
<actionandroid:name="ent.action.MAIN"/>
<categoryandroid:name="ent.category.LAUNCHE R"/></intent-filter>
</activity>
</application>
</manifest>
程序运行效果如下所示
实验结论及总结
成绩
教师签字
日期
小渣云 做那个你想都不敢想的套餐 你现在也许不知道小渣云 不过未来你将被小渣云的产品所吸引小渣云 专注于一个套餐的商家 把性价比 稳定性 以及价格做到极致的商家,也许你不相信36元在别人家1核1G都买不到的价格在小渣云却可以买到 8核8G 高配云服务器,并且在安全性 稳定性 都是极高的标准。小渣云 目前使用的是美国超级稳定的ceranetworks机房 数据安全上 每5天备份一次数据倒异地 支持一...
不知道大家是否注意到sharktech的所有服务器的带宽价格全部跳楼跳水,降幅简直不忍直视了,还没有见过这么便宜的独立服务器。根据不同的机房,价格也是不一样的。大带宽、不限流量比较适合建站、数据备份、做下载、做流媒体、做CDN等多种业务。 官方网站:https://www.sharktech.net 付款方式:比特币、信用卡、PayPal、支付宝、西联汇款 以最贵的洛杉矶机器为例,配置表如...
racknerd怎么样?racknerd商家最近促销三款美国便宜vps,最低只需要9.49美元,可以选择美国圣何塞、西雅图、纽约和芝加哥机房。RackNerd是一家成立于2019年的美国高性价比服务器商家,主要从事美国和荷兰数据中心的便宜vps、独立服务器销售!支持中文工单、支持支付宝和微信以及PayPal付款购买!点击直达:racknerd官方网站INTEL系列可选机房:加利福尼亚州圣何塞、芝加...