当前位置: 首页 > news >正文

图书馆网站建设需求分许中国摄影网官网首页

图书馆网站建设需求分许,中国摄影网官网首页,模板网站和定制网站影响排名,2345网址导航下载读书笔记系列#xff08;第一行代码#xff09; 5.1 广播机制简介 标准广播#xff1a;完全异步执行#xff0c;广播发出后#xff0c;所有广播接收器几乎都同一时刻收到这条广播#xff08;无法被截断#xff09;有序广播#xff1a;同步执行#xff0c;广播发出后…读书笔记系列第一行代码 5.1 广播机制简介 标准广播完全异步执行广播发出后所有广播接收器几乎都同一时刻收到这条广播无法被截断有序广播同步执行广播发出后同一时刻只会有一个广播接收器能收到这条广播消息前面的接收器可以截断正在传递的广播 5.2 接收系统广播 广播接收器可在代码中注册和AndroidManifest.xml中注册前者为动态注册后者被称为静态注册。 5.2.1 动态注册监听网络变化 示例代码 public class MainActivity extends AppCompatActivity {private IntentFilter intentFilter;private NetworkChangeReceiver networkChangeReceiver;Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView((R.layout.activity_main));intentFilter new IntentFilter();intentFilter.addAction(android.net.conn.CONNECTIVITY_VHANGE);networkChangeReceiver new NetworkChangeReceiver();registerReceiver(networkChangeReceiver, intentFilter);}Overrideprotected void onDestroy(){super.onDestroy();unregisterReceiver(networkChangeReceiver);}class NetworkChangeReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent){ConnectivityManager connectionManager (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo connectionManager.getActiveNetworkInfo();if(networkInfo ! null networkInfo.isAvailable()){Toast.makeText(context, network is available, Toast.LENGTH_SHORT).show();}else {Toast.makeText(context, network is unavailable, Toast.LENGTH_SHORT).show();}Toast.makeText(context, network changes, Toast.LENGTH_SHORT).show();}} }静态注册实现开机启动 receiverandroid:name.BootCompleteReceiverandroid:enabledtrueandroid:exportedtrue/receiverExport属性表示是否允许这个广播接收器接收本程序以外的广播enable表示是否使用这个广播接收器。 receiverandroid:name.BootCompleteReceiverandroid:enabledtrueandroid:exportedtrueintent-filteraction android:nameandroid.intent.action.BOOT_COMPLETED//intent-filter/receiver添加了filter就可以过滤了 可以通过左键新建-》其它来新建静态注册广播 广播接收器中不允许开线程当onReceive方法运行较长时间而没结束时程序就会报错所以其中不能添加过多的逻辑或任何耗时操作。 5.3 发送自定义广播 5.3.1 发送标准广播 Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView((R.layout.activity_main));Button button (Button)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener(){Overridepublic void onClick(View v){Intent intent new Intent(com.example.broadcasttest.MY_BROADCAST);sendBroadcast(intent);}});}通过点击按钮发送广播 public class myBroadcastReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, receiverd in myBroadcastReceiver, Toast.LENGTH_SHORT).show();} }这里是自定义的接收器 receiverandroid:name.myBroadcastReceiverandroid:enabledtrueandroid:exportedtrueintent-filteraction android:namecom.example.broadcasttest.MY_BROADCAST//intent-filter/receiver在xml中定义过滤的广播类型 5.3.2 发送有序广播 广播是一种跨进程的通信方式 protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView((R.layout.activity_main));Button button (Button)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener(){Overridepublic void onClick(View v){Intent intent new Intent(com.example.broadcasttest.MY_BROADCAST);sendOrderedBroadcast(intent, null);}});}只需要修改一行代码 sendOrederedBroadcast即可发送有序广播同时在接收器的xml文件中可以设置优先级 receiverandroid:name.myBroadcastReceiverandroid:enabledtrueandroid:exportedtrue !-- 在这里设置优先级--intent-filter android:priority100action android:namecom.example.broadcasttest.MY_BROADCAST//intent-filter/receiver如果想要在接收到广播之后就让广播停止继续传递呢修改onReceive的代码即可 public void onReceive(Context context, Intent intent) {Toast.makeText(context, receiverd in myBroadcastReceiver, Toast.LENGTH_SHORT).show(); // 停止继续传递abortBroadcast();}5.4 使用本地广播 前面我们发送和接收的广播全部属于系统全局广播,即发出的广播可以被其他任何应用程序接收到,并且我们也可以接收来自于其他任何应用程序的广播。这样就很容易引起安全性的问题,比如说我们发送的一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的程序不停地向我们的广播接收器里发送各种垃圾广播。 使用本地广播则发出的广播只能在应用程序内部传递并且接收器也只能接收来自本应用程序发出的广播。 public class MainActivity extends AppCompatActivity {private IntentFilter intentFilter;private LocalReceiver localReceiver;private LocalBroadcastManager localBroadcastManger;Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView((R.layout.activity_main));localBroadcastManger LocalBroadcastManager.getInstance(this); //获取实例Button button (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {Intent intent new Intent(com.example.broadcasttest.LOCAL_BROADCAST);localBroadcastManger.sendBroadcast(intent); //发送本地广播}});intentFilter new IntentFilter();intentFilter.addAction(com.example.broadcasttest.LOCAL_BROADCAST);localReceiver new LocalReceiver();localBroadcastManger.registerReceiver(localReceiver, intentFilter); //注册本地广播监听器}Overrideprotected void onDestroy(){super.onDestroy();localBroadcastManger.unregisterReceiver(localReceiver);}class LocalReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, received local broadcast, Toast.LENGTH_SHORT).show();}} }代码的不同主要在于需要首先获取实例然后还要有注册。 需要注意的是本地广播无法通过静态注册来接收。 5.5 使用广播实现强制下线功能 强制下线功能首先需要实现下关闭所有的活动的功能新建一个ActivityCollector类管理所有的活动 public class ActivityCollector {public static ListActivity activities new ArrayList();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();}}} }然后创建baseActivity类作为活动的父类代码如下 public class BaseActivity extends AppCompatActivity {private ForceOfflineReceiver receiver;Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);ActivityCollector.addActivity(this);}Overrideprotected void onResume(){super.onResume();IntentFilter intentFilter new IntentFilter();intentFilter.addAction(com.example.broadcastbestpractice.FORCE_OFFLINE);receiver new ForceOfflineReceiver();registerReceiver(receiver, intentFilter);}Overrideprotected void onPause(){super.onPause();if(receiver ! null){unregisterReceiver(receiver);receiver null;}}Overrideprotected void onDestroy(){super.onDestroy();ActivityCollector.removeActivity(this);}class ForceOfflineReceiver extends BroadcastReceiver{Overridepublic 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);builder.setCancelable(false);builder.setPositiveButton(OK, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialogInterface, int which) {ActivityCollector.finishAll(); //销毁所有活动Intent intent new Intent(context, LoginActivity.class);context.startActivity(intent); //重新启动loginActivity}});builder.show();}} }我们可以注意到之前编写注册和销毁接收器的时候是在onCreate和onDestroy这两个函数里的但是上面代码中却写在了onResume和onPause里面这是因为我们每次都只需要在栈顶的活动接收广播非栈顶活动没必要接收这条广播。 除此之外我们创建一个登陆的活动在活动页面上放置输入框并编写登录逻辑 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:idid/containerandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:paddingLeftdimen/activity_horizontal_marginandroid:paddingTopdimen/activity_vertical_marginandroid:paddingRightdimen/activity_horizontal_marginandroid:paddingBottomdimen/activity_vertical_margintools:context.ui.login.LoginActivityLinearLayoutandroid:orientationhorizontalandroid:layout_widthmatch_parentandroid:layout_height60dptools:ignoreMissingConstraintsTextViewandroid:layout_width90dpandroid:layout_heightwrap_contentandroid:layout_gravitycenter_horizontalandroid:textSize18spandroid:textAccount:/EditTextandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:idid/accountandroid:layout_weight1android:layout_gravitycenter_horizontal//LinearLayoutLinearLayoutandroid:orientationhorizontalandroid:layout_widthmatch_parentandroid:layout_height60dptools:ignoreMissingConstraintsTextViewandroid:layout_width90dpandroid:layout_heightwrap_contentandroid:layout_gravitycenter_horizontalandroid:textSize18spandroid:textpassword:/EditTextandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:idid/passwordandroid:layout_weight1android:layout_gravitycenter_horizontal//LinearLayoutButtonandroid:layout_widthmatch_parentandroid:layout_height60dpandroid:idid/loginandroid:textLogintools:ignoreMissingConstraints/Button/androidx.constraintlayout.widget.ConstraintLayoutpublic class LoginActivity extends AppCompatActivity {private EditText accountEdit;private EditText passwordEdit;private Button login;Overrideprotected 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() {Overridepublic void onClick(View v) {String account accountEdit.getText().toString();String password passwordEdit.getText().toString();//如果账号是admin 且密码是123456则登录成功if(account.equals(admin) password.equals(123456)){Intent intent new Intent(LoginActivity.this, MainActivity.class);startActivity(intent);finish();}else {Toast.makeText(LoginActivity.this, account is invalid, Toast.LENGTH_SHORT).show();}}});} }这样就模拟了登录的窗口然后在mainActivity中加入触发强制下线的代码 public class MainActivity extends BaseActivity {Overrideprotected 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() {Overridepublic void onClick(View v) {Intent intent new Intent(com.example.broadcastbestpractice.FROCE_OFFLINE);sendBroadcast(intent);}});} }这样逻辑就差不多了下面去AndroidManifest.xml中修改下程序入口即可
http://www.hkea.cn/news/14290223/

相关文章:

  • 网站开发经理具备什么知识设计制作小车二教学设计
  • 上海定制建站网站建设杭州网站建设制作公司
  • 智能网站价格站酷海报设计图片
  • 建设银行辽宁分行报名网站部门网站 法规制度 建设情况
  • 武威网站制作公司电话多少新浪云虚拟主机做电影网站
  • 网站经营与建设爱客crm下载
  • 达州网站建设公司机票酒店网站建设
  • 飞飞影视做的网站做游戏网站用什么软件
  • 网站会员注册系统在线制作图片代码
  • 北京做企业网站多少钱帮别人做网站市场价
  • 北京网站优化诊断淘宝网pc首页
  • 2017响应式网站 全站天津seo培训
  • 做公司网站怎么删除图片义乌万物网络科技 网站建设
  • 高中学校网站模板网页微信登录
  • 网站开发 0755优秀营销策划方案
  • 北京建站公司兴田德润很好热搜关键词
  • 手机如何做api网站中国企业500强
  • 公司网站维护一般需要做什么商机互联网站建设
  • 上海发乐门网站建设公司遵义房产信息网
  • 网站格式有哪些爱站seo
  • 统计二级域名的网站流量有什么用广东手机网站建设价格
  • 做网站公司昆明自助建设视频网站
  • 北京朝阳网站戴尔的网站建设有哪些主要特色
  • 专业行业网站建站报价lol做视频那个网站好
  • 用ps怎么做网站导航条wordpress 文章表格
  • 茶叶网站源码 下载兰州专业做网站的公司
  • 建设银行观澜支行网站广州商城网站建设地址
  • .net网站吃内存少儿编程加盟哪个品牌好
  • 群晖nas做网站高校网站群管理系统
  • 北京网站推广技巧交换链接的例子