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

微网站 pc网站同步企业融资方式有哪些

微网站 pc网站同步,企业融资方式有哪些,西安火车站网站建设,WordPress代码改silder简介 某个网络的IP范围是192.168.0.XXX#xff0c;子网 掩码是255.255.255.0#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一 网络上的所有端口#xff0c;这样在该网络中的每台主机都将会收到这条广播。为了便于进行系统级别的消息通知子网 掩码是255.255.255.0那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一 网络上的所有端口这样在该网络中的每台主机都将会收到这条广播。为了便于进行系统级别的消息通知Android也引入了一套类似的广播消息机制。这是因为Android中的每个应用程序都可以对自己感 兴趣的广播进行注册这样该程序就只会接收到自己所关心的广播内容这些广播可能是来自 于系统的也可能是来自于其他应用程序的。Android提供了一套完整的API允许应用程序自 由地发送和接收广播。发送广播的方法其实之前稍微提到过如果你记性好的话可能还会有印 象就是借助我们第2章学过的Intent。而接收广播的方法则需要引入一个新的概念——广播接 收器Broadcast Receiver。广播接收器的具体用法将会在下一节中做介绍这里我们先来了解一下广播的类型。Android中 的广播主要可以分为两种类型标准广播和有序广播。 一、广播的方式 标准广播 标准广播 Normal broadcasts是一种完全异步执行的广播在广播发出之后所有的广播 接收器几乎都会在同一时刻接收到这条广播消息因此它们之间没有任何先后顺序可言。 这种广播的效率会比较高但同时也意味着它是无法被截断的。标准广播的工作流程如图所示。 有序广播 有序广播 Ordered broadcasts则是一种同步执行的广播在广播发出之后同一时刻只 会有一个广播接收器能够收到这条广播消息当这个广播接收器中的逻辑执行完毕后广 播才会继续传递。所以此时的广播接收器是有先后顺序的优先级高的广播接收器就可以 先收到广播消息并且前面的广播接收器还可以截断正在传递的广播这样后面的广播接 收器就无法收到广播消息了。有序广播的工作流程如图所示。 二、动态注册监听网络变化 Android内置了很多系统级别的广播我们可以在应用程序中通过监听这些广播来得到各种系统 的状态信息。比如手机开机完成后会发出一条广播电池的电量发生变化会发出一条广播时 间或时区发生改变也会发出一条广播等等。如果想要接收到这些广播就需要使用广播接收 器下面我们就来看一下它的具体用法。广播接收器可以自由地对自己感兴趣的广播进行注册这样当有相应的广播发出时广播接收 器就能够收到该广播并在内部处理相应的逻辑。注册广播的方式一般有两种在代码中注册动态注册 和在AndroidManifest.xml中注册静态注册。 三、动态注册 1.定义NetworkChangeReceived监听网络状态变化 第一种代码逻辑 public class NetworkChangeReceived extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {boolean isConnected isNetworkConnected(context);String statusMessage isConnected ? 连接 : 断开;String networkType NetworkType(context);Toast.makeText(context, 网络已 statusMessage ,类型 networkType, Toast.LENGTH_SHORT).show();}}private boolean isNetworkConnected(Context context) {ConnectivityManager cm (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo activeNetwork cm.getActiveNetworkInfo();return activeNetwork ! null activeNetwork.isConnectedOrConnecting();}private String NetworkType(Context context) {ConnectivityManager cm (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo activeNetwork cm.getActiveNetworkInfo();return activeNetwork ! null ? activeNetwork.getTypeName() : 未知;} }/*代码解释*/// 定义一个BroadcastReceiver子类用于监听网络状态变化 public class NetworkChangeReceived extends BroadcastReceiver {// 当接收到广播时调用此方法Overridepublic void onReceive(Context context, Intent intent) {// 检查Intent的动作是否为网络连接状态改变if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {// 调用私有方法检查网络是否连接boolean isConnected isNetworkConnected(context);// 根据网络连接状态构建提示消息String statusMessage isConnected ? 连接 : 断开;// 获取网络类型String networkType NetworkType(context);// 使用Toast显示网络状态和类型Toast.makeText(context, 网络已 statusMessage ,类型 networkType, Toast.LENGTH_SHORT).show();}}// 私有方法用于检查网络是否处于连接状态private boolean isNetworkConnected(Context context) {// 获取系统的ConnectivityManager服务ConnectivityManager cm (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);// 获取当前活动的网络信息NetworkInfo activeNetwork cm.getActiveNetworkInfo();// 判断网络信息是否非空并且网络正在连接或已经连接return activeNetwork ! null activeNetwork.isConnectedOrConnecting();}// 私有方法用于获取网络类型private String NetworkType(Context context) {// 获取系统的ConnectivityManager服务ConnectivityManager cm (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);// 获取当前活动的网络信息NetworkInfo activeNetwork cm.getActiveNetworkInfo();// 如果网络信息非空返回网络类型名否则返回未知return activeNetwork ! null ? activeNetwork.getTypeName() : 未知;} }第二种代码逻辑 public class NetworkChangeReceived extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {Toast.makeText(context,checkNetworkConnectionAndGetType(context), Toast.LENGTH_SHORT).show();}}public static String checkNetworkConnectionAndGetType(Context context) {ConnectivityManager cm (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo info cm.getActiveNetworkInfo();if (info ! null info.isConnectedOrConnecting()) {// 网络已连接返回网络类型名称return 连接info.getTypeName();} else {// 未连接网络return 断开;}} }/*代码解释*//*** NetworkChangeReceived 类继承自 BroadcastReceiver用于监听和响应网络状态变化的广播事件。*/ public class NetworkChangeReceived extends BroadcastReceiver {/*** 当接收到广播时调用此方法。* * param context 上下文提供了应用程序的环境信息。* param intent Intent 对象包含了广播的数据和动作。*/Overridepublic void onReceive(Context context, Intent intent) {/*** 检查 Intent 的动作是否是网络状态改变的广播。* 如果是则获取网络状态和类型的信息并通过 Toast 显示给用户。*/if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {Toast.makeText(context, checkNetworkConnectionAndGetType(context), Toast.LENGTH_SHORT).show();}}/*** 检查当前设备的网络连接状态并返回连接状态和网络类型。* * param context 上下文提供了应用程序的环境信息。* return 返回一个字符串描述了当前网络的连接状态和类型。*/public static String checkNetworkConnectionAndGetType(Context context) {// 从系统服务中获取 ConnectivityManager 实例用于管理网络连接。ConnectivityManager cm (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);// 获取当前活动的网络信息。NetworkInfo info cm.getActiveNetworkInfo();if (info ! null info.isConnectedOrConnecting()) {// 如果网络已连接返回网络类型名称并且前面加上连接两个字。return 连接 info.getTypeName();} else {// 如果网络未连接返回断开。return 断开;}} } 2.Mainactivity中应用NetworkChangeReceived public class MainActivity extends AppCompatActivity {private NetworkChangeReceived networkChangeReceived;private static final int PERMISSION_REQUEST_CODE 1;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);if (ContextCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS_NETWORK_STATE)!PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_NETWORK_STATE}, PERMISSION_REQUEST_CODE);}else {registerReceiver();}}Overridepublic void onRequestPermissionsResult(int requestCode,NonNull String[] permissions, NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode PERMISSION_REQUEST_CODE){if (grantResults.length 0 grantResults[0] PackageManager.PERMISSION_GRANTED) {registerReceiver();}else {Toast.makeText(this, 没有网络权限无法检测网络状态, Toast.LENGTH_SHORT).show();}}}private void registerReceiver(){networkChangeReceived new NetworkChangeReceived();IntentFilter filter new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(networkChangeReceived,filter);}Overrideprotected void onDestroy() {super.onDestroy();if (networkChangeReceived ! null) {unregisterReceiver(networkChangeReceived);}} }/*代码解释*//*** MainActivity 类继承自 AppCompatActivity是应用的主要活动入口点。*/ public class MainActivity extends AppCompatActivity {// 声明一个 NetworkChangeReceived 对象用于接收网络状态变化的广播。private NetworkChangeReceived networkChangeReceived;// 定义一个常量用于请求权限时的请求码。private static final int PERMISSION_REQUEST_CODE 1;/*** 在 Activity 创建时调用。* * param savedInstanceState 可能包含先前实例状态的 Bundle 对象。*/Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this); // 这里假设 EdgeToEdge 是一个库的方法用于设置全屏边缘到边缘的界面。setContentView(R.layout.activity_main); // 设置 Activity 的布局资源。// 检查是否已有访问网络状态的权限。if (ContextCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS_NETWORK_STATE) ! PackageManager.PERMISSION_GRANTED) {// 请求访问网络状态的权限。ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_NETWORK_STATE}, PERMISSION_REQUEST_CODE);} else {// 如果已经有权限则注册网络状态变化的广播接收器。registerReceiver();}}/*** 当权限请求的结果返回时调用。* * param requestCode 请求码用于识别哪个权限请求的回调。* param permissions 请求的权限数组。* param grantResults 权限请求的结果数组。*/Overridepublic void onRequestPermissionsResult(int requestCode,NonNull String[] permissions, NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode PERMISSION_REQUEST_CODE) {if (grantResults.length 0 grantResults[0] PackageManager.PERMISSION_GRANTED) {// 如果权限被授予注册网络状态变化的广播接收器。registerReceiver();} else {// 如果权限被拒绝显示一个 Toast 提示用户。Toast.makeText(this, 没有网络权限无法检测网络状态, Toast.LENGTH_SHORT).show();}}}/*** 注册网络状态变化的广播接收器。*/private void registerReceiver() {networkChangeReceived new NetworkChangeReceived();IntentFilter filter new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(networkChangeReceived, filter);}/*** 在 Activity 销毁时调用。*/Overrideprotected void onDestroy() {super.onDestroy();if (networkChangeReceived ! null) {// 在 Activity 销毁前取消注册网络状态变化的广播接收器。unregisterReceiver(networkChangeReceived);}} } 四、静态注册实现开机启动 动态注册的广播接收器可以自由地控制注册与注销在灵活性方面有很大的优势但是它也存 在着一个缺点即必须要在程序启动之后才能接收到广播因为注册的逻辑是写 在onCreate() 方法中的。这里我们准备让程序接收一条开机广播当收到这条广播时就可以在onReceive() 方法里执 行相应的逻辑从而实现开机启动的功能。可以使用Android Studio提供的快捷方式来创建一个 广播接收器右击com.example.broadcasttest包→New→Other→Broadcast Receiver。 创建广播接收器的窗口 Exported 属性表示是否允许 这个广播接收器接收本程序以外的广播Enabled 属性表示是否启用这个广播接收器。勾选这 两个属性点击Finish完成创建。 自动新建一个类并继承BroadcastReceiver public class MyReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, My Receiver, Toast.LENGTH_LONG).show();} } 五、AndroidManifest.xml文件中注册 静态的广播接收器一定要在AndroidManifest.xml文件中注册才可以使用不过由于我们是 使用Android Studio的快捷方式创建的广播接收器因此注册这一步已经被自动完成了。打开 AndroidManifest.xml文件瞧一瞧代码如下所示 ?xml version1.0 encodingutf-8? manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsuses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE /uses-permission android:nameandroid.permission.RECEIVE_BOOT_COMPLETED /applicationandroid:allowBackuptrueandroid:dataExtractionRulesxml/data_extraction_rulesandroid:fullBackupContentxml/backup_rulesandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:supportsRtltrueandroid:themestyle/Theme.MyApplicationtools:targetApi31receiverandroid:name.MyReceiverandroid:enabledtrueandroid:exportedtrueintent-filteraction android:nameandroid.intent.action.BOOT_COMPLETED//intent-filter/receiveractivityandroid:name.MainActivityandroid:exportedtrueintent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filter/activity/application /manifest!-- 代码解释 --?xml version1.0 encodingutf-8? !-- 指定文档的版本和编码方式 -- manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/tools!-- 声明命名空间定义了 Android 和工具属性的前缀 --!-- 声明应用需要的权限 --uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE /!-- 允许应用访问网络状态 --uses-permission android:nameandroid.permission.RECEIVE_BOOT_COMPLETED /!-- 允许应用接收设备启动完成的广播 --applicationandroid:allowBackuptrue!-- 应用的数据是否允许被备份 --android:dataExtractionRulesxml/data_extraction_rules!-- 数据提取规则定义哪些数据可以被提取 --android:fullBackupContentxml/backup_rules!-- 完整备份内容规则定义哪些数据应该包含在完整备份中 --android:iconmipmap/ic_launcher!-- 应用图标资源的引用 --android:labelstring/app_name!-- 应用的显示名称 --android:roundIconmipmap/ic_launcher_round!-- 圆形应用图标资源的引用适用于圆形图标显示的场景 --android:supportsRtltrue!-- 是否支持从右到左的语言布局方向 --android:themestyle/Theme.MyApplication!-- 应用主题的样式引用 --tools:targetApi31!-- 工具属性指定应用的目标 API 级别 --!-- 定义一个广播接收器 --receiverandroid:name.MyReceiverandroid:enabledtrue!-- 是否启用该接收器 --android:exportedtrue!-- 是否允许其他应用发送广播到该接收器 --intent-filter!-- 定义接收器能够接收的广播类型 --action android:nameandroid.intent.action.BOOT_COMPLETED/!-- 接收设备启动完成的广播 --/intent-filter/receiver!-- 定义一个活动 --activityandroid:name.MainActivityandroid:exportedtrue!-- 活动的类名和是否允许外部应用启动 --intent-filter!-- 定义活动能够响应的意图类型 --action android:nameandroid.intent.action.MAIN /!-- 活动是应用的入口点 --category android:nameandroid.intent.category.LAUNCHER /!-- 活动属于 Launcher 类别意味着它会出现在应用启动器中 --/intent-filter/activity/application /manifest 由于Android系统启动完成后会发出一条值为android.intent.action.BOOT_COMPLETED 的广播因此我们在 标签里添加了相应的action。另外监听系统开机广播 也是需要声明权限的可以看到我们使用 标签又加入了一 条android.permission.RECEIVE_BOOT_COMPLETED 权限。目前为止我们在广播接收器的onReceive() 方法中都只是简单地使用Toast提示了一段文 本信息当你真正在项目中使用到它的时候就可以在里面编写自己的逻辑。需要注意的是 不要在onReceive() 方法中添加过多的逻辑或者进行任何的耗时操作因为在广播接收器中 是不允许开启线程的当onReceive() 方法运行了较长时间而没有结束时程序就会报错。 因此广播接收器更多的是扮演一种打开程序其他组件的角色比如创建一条状态栏通知或者 启动一个服务等
http://www.pierceye.com/news/753235/

相关文章:

  • 哈尔滨网站快速排名网站采集被降权
  • 做网站要钱吗学校网站建设调查问卷
  • 重庆网站建设招标网站建设网站建设教程
  • 权威的广州h5网站seo网站分析工具
  • 美食网站要怎么做游戏优化大师下载安装
  • vip解析网站怎么做的做网站需要注册商标多少类
  • 一般做网站宽高多少网页调用 wordpress 图片编辑器
  • 简述网站建设的基本过程word模板免费下载网站
  • 页面好看的蛋糕网站wordpress路由插件
  • 网站建站四种方案深圳网站建设维护
  • 企业网站优化的方案游戏网页设计图片
  • 烟台html5网站建设wordpress主题 亚马逊
  • 个人网站做电商wordpress.php扩张
  • c2c电子商务网站定制开发校园网建设网站特色
  • 企业网站制作公司有哪些做手机网站公司
  • 怎么做flash网站设计惠州做网站公司哪家好
  • 网站开发文档下载餐饮vi设计一套多少钱
  • 平湖网站建设公司克正规的网店平台有哪些
  • 网站建设销售求职网络营销推广引流方法
  • 深圳网站建设官网网站背景素材
  • 建设部网站安全考核证书查询平面设计的素材网站
  • 郑州制作个人网站网站个人备案做企业网站
  • 昆明有网站的公司专注网站平台推广公司
  • 网站建设酷隆莲湖免费做网站
  • 网站建设内容保障制度什么网站权威评价搜索引擎优劣
  • 中国建设局网站东莞市路桥收费所
  • 那个网站上有做婚礼布场样图的公司网站排名
  • 凡客资源东莞市seo网络推广服务机构
  • 网站的安全维护wordpress 文章 定时
  • 网上做题扣分在哪个网站上做网站建设微信商城运营