广播机制简介

Android提供了一套完整的API,允许应用程 序自由地发送和接收广播。
Android 中的广播主要可以分为两种类型:标准广播和有序广播。

  • 标准广播(Normal broadcasts )是一种完全异步执行的广播,在广播发出之后,所有的广 播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可 言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。
    在这里插入图片描述
  • 有序广播(Ordered broadcasts )则是一种同步执行的广播,在广播发出之后,同一时刻只 会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后, 广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就 可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的 广播接收器就无法收到广播消息了。
    在这里插入图片描述

接收系统广播

动态注册监听网络变化
注册广播的方式一般有两种,在代码中注册和AndroidManifest.xml中注册,其中前者也被称为动态注册,后者也被称为静态注册。

那么该如何创建一个广播接收器呢?其实只需要新建一个类,让它继承自BroadcastReceiver, 并重写父类的onReceive()方法就行了。这样当有广播到来时,onReceive()方法 就会得到执行,具体的逻辑就可以在这个方法中处理。

动态注册:新建一个BroadcastTest项目,然后修改MainActivity中的代码

public class MainActivity extends AppCompatActivity {private IntentFilter intentFilter;private NetworkChangeReceiver networkChangeReceiver;@Overrideprotected void onCreate(Bundle savedlnstanceState) {super.onCreate(savedlnstanceState); setContentView(R.layout.activitymain);intentFilter = new IntentFilterd; intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter);}©Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver);}class NetworkChangeReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show(); }}
}

我们在MainActivity中定义了一个内部类NetworkChangeReceiver,这个类是 继承自BroadcastReceiver的,并重写了父类的onReceive()方法。这样每当网络状态发生变 化时,onReceive ()方法就会得到执行,这里只是简单地使用Toast提示了一段文本信息。

然后观察onCreate()方法,首先我们创建了一个IntentFilter的实例,并给它添加了一 个值为android.net.conn.CONNECTIVTY_CHANGE的action,为什么要添加这个值呢?因为当 网络状态发生变化时,系统发出的正是一条值为android. net. conn.CONNECTIVITY_CHANGE的 广播,也就是说我们的广播接收器想要监听什么广播,就在这里添加相应的action。接下来创建 了一个NetworkChangeReceiver的实例,然后调用registerReceiver()方法进行注册,将NetworkChangeReceiver 的实例和 IntentFilter 的实例都传了进去,这样 NetworkChangeReceiver 就会收到所有值为android.net.conn.CONNECTIVTY_CHANGE的广播,也就实现了 监听网络变化的功能。

最后要记得,动态注册的广播接收器一定都要取消注册才行,这里我们是在onDestroyO 方法中通过调用unregisterReceiver()方法来实现的。

不过,只是提醒网络发生了变化还不够人性化,最好是能准确地告诉用户当前是有网络还是 没有网络,因此我们还需要对上面的代码进行进一步的优化。

public class MainActivity extends AppCompatActivity (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.isAvailableC)) {Toast.makeText(context, "network is available11, 	Toast.LENGTH_SHORT). show();} else {Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT). show();}}}
}

在 onReceive()方法中,首先通过 getSystemService()方法得到了 ConnectivityManager 的实例,这是一个系统服务类,专门用于管理网络连接的。然后调用它的getActiveNetwork- Info()方法可以得到Networkinfo的实例,接着调用Networkinfo的isAvailable()方法, 就可以判断出当前是否有网络了

这里访问系统的网络状态就是需要声明权限的。打开 AndroidManifest.xml文件,在里面加入如下权限就可以访问系统网络状态了

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.broadcasttest"><uses-permission android:name=ilandroid.permission.ACCESS_NETWORK_STATE" />
</manifest>

静态注册实现开机启动

动态注册的广播接收器必须要在程序启动之后才能接收到广播。
静态注册可以让程序在未启动的情况下就能接收到广播

可以使用Android Studio 的快捷方式来创建一 个广播接收器,右击 com.example.broadcasttest >New—>Other->Broadcast Receiver
在这里插入图片描述
我们将广播接收器命名为BootCompleteReceiver, Exported属性表示是否 允许这个广播接收器接收本程序以外的广播,Enabled属性表示是否启用这个广播接收器。勾选 这两个属性,点击Finish完成创建。
然后修改BootCompleteReceiver中的代码

public class BootCompleteReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) (Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show();} 
}

静态的广播接收器一定要在AndroidManifest.xml文件中注册才可以使用,不过由于我 们是使用Android Studio的快捷方式创建的广播接收器,因此注册这一步已经被自动完成了。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest"><uses-permission android:name="android.permission.ACCESS NETWORK STATE" /><applicationandroid:allowBackup="true"android: icon="@mipmap/ic_launcher"android:label="@string/appname"android:supportsRtl="true"android:theme="@style/AppTheme"><receiverandroid:name=".BootCompleteReceiver"android:enabled="true"android:exported="true"></receiver></application>
</manifest>

可以看到,标签内出现了一个新的标签,所有静态的广播接收 器都是在这里进行注册的。
不过目前BootCompleteReceiver还是不能接收到开机广播的,我们还需要对AndroidManifest. xml文件进行修改才行,如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest"><uses-permission android:name="android.permission.ACCESS NETWORK STATE" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><applicationandroid:allowBackup="true"android: icon="@mipmap/ic_launcher"android:label="@string/appname"android:supportsRtl="true"android:theme="@style/AppTheme"><receiverandroid:name=".BootCompleteReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.BOOT__COMPLETED" /> </intent-filter></receiver></application>
</manifest>

由于Android系统启动完成后会发出一条值为android. intent. action. BOOT COMPLETED 的广播,因此我们在标签里添加了相应的action.另外,监听系统开机广播也 是需要声明权限的,可以看到,我们使用标签又加入了一条android.permission.RECEIVE_BOOT_COMPLETED 权限。

发送自定义广播

发送标准广播

在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发出去 也是白发。因此新建一个MyBroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_ SHORT).show();}
}

这里当MyBroadcastReceiver收到自定义的广播时,就会弹出“received in MyBroadcast- Receiver”的提示。然后在AndroidManifest.xml中对这个广播接收器进行修改:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest"><uses-permission android:name="android.permission.ACCESS NETWORK STATE" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><applicationandroid:allowBackup="true"android: icon="@mipmap/ic_launcher"android:label="@string/appname"android:supportsRtl="true"android:theme="@style/AppTheme"><receiverandroid:name=".BootCompleteReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter></receiver></application>
</manifest>

可以看到,这里让 MyBroadcastReceiver 接收一条值为 com.example.broadcasttest.
MY_BROADCAST的广播,因此待会儿在发送广播的时候,我们就需要发出这样的一条广播。
接下来修改activity main.xml中的代码,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent" ><Buttonandroid:id="@+id/button"and roid: layout_width=,,match_pa rent"android:layout_height="wrap_content" android:text=uSend Broadcast"/>
</LinearLayout>

这里在布局文件中定义了一个按钮,用于作为发送广播的触发点。然后修改MainActivity中 的代码,如下所示:

public class MainActivity extends AppCompatActivity {©Overrideprotected void onCreate(Bundle savedlnstanceState) {super.onCreate(savedlnstanceState);setContentView(R.layout.activitymain);Button button = (Button) findViewById(R.id.button); 	button.setOnClickListener(new View.OnClickListener() { 		@Override public void onClick(View v) {Intent intent = newIntent("com.example.broadcasttest.MY_BROADCAST"); 		sendBroadcast(intent);}})}

可以看到,我们在按钮的点击事件里面加入了发送自定义广播的逻辑。首先构建岀了一个 Intent对象,并把要发送的广播的值传入,然后调用了 Context的sendBroadcast()方法将广 播发送出去,这样所有监听com.example.broadcasttest.MY_BROADCAST这条广播的广播接收 器就会收到消息。此时发岀去的广播就是一条标准广播。

发送有序广播

新建一个 BroadcastTest2 项目,将项目创建好之后,还需要在这个项目下定义一个广播接收器,用于接收上一小节中的自定 义广播。新建AnotherBroadcastReceiver

public class AnotherBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "received in AnotherBroadcastReceiver"Toast.LENGTH_SHORT).show();
}
}

这里仍然是在广播接收器的onReceive()方法中弹出了一段文本信息。然后在
AndroidManifest.xml中对这个广播接收器进行修改

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest"><uses-permission android:name="android.permission.ACCESS NETWORK STATE" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><applicationandroid:allowBackup="true"android: icon="@mipmap/ic_launcher"android:label="@string/appname"android:supportsRtl="true"android:theme="@style/AppTheme"><receiverandroid:name=".AnotherBroadcastReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter></receiver></application>
</manifest>

可以看到,AnotherBroadcastReceiver 同样接收的是 com.example. broadcasttest.MY_BROADCAST这条广播。现在运行BroadcastTest2项目将这个程序安装到模拟器上,然后重新回到BroadcastTest项目的主界面,并点击一下Send Broadcast按钮,就会分别弹出两次提示信息

这样就强有力地证明了,我们的应用程序发出的广播是可以被其他的应用程序接收到的。 不过到目前为止,程序里发出的都还是标准广播,现在我们来尝试一下发送有序广播。重新
回到BroadcastTest项目,然后修改MainActivity中的代码

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedlnstanceState) {super.onCreate(savedlnstanceState); 	setContentView(R.layout.activitymain);Button button = (Button) findViewByld(R.id.button); button.setOnClickListener(new View.OnClickListener() { @0verride public void onClick(View v) {Intent intent = newIntent("com.example.broadcasttest.MYBROADCAST"); sendOrderedBroadcast(intent, null);}})}
}

发送有序广播只需要改动一行代码,即将sendBroadcastO方法改成sendOrderedBroadcast () 方法。sendOrderedBroadcast()方法接收两个参数,第一个参数仍然是 Intent,第二个参数是一个与权限相关的字符串,这里传入null就行了。现在重新运行程序, 并点击Send Broadcast按钮,你会发现,两个应用程序仍然都可以接收到这条广播

这个时候的广播接收器是有先后顺序的, 而且前面的广播接收器还可以将广播截断,以阻止其继续传播。

那么该如何设定广播接收器的先后顺序呢?当然是在注册的时候进行设定的了。修改AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest"><uses-permission android:name="android.permission.ACCESS NETWORK STATE" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><applicationandroid:allowBackup="true"android: icon="@mipmap/ic_launcher"android:label="@string/appname"android:supportsRtl="true"android:theme="@style/AppTheme"><receiverandroid:name=".AnotherBroadcastReceiver"android:enabled="true"android:exported="true"><intent-filter android:priority="100"><action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter></receiver></application>
</manifest>

可以看到,我们通过android:priority属性给广播接收器设置了优先级,优先级比较高 的广播接收器就可以先收到广播。这里将MyBroadcastReceiver的优先级设成了 100,以保证它一 定会在AnotherBroadcastReceiver之前收到广播。
既然已经获得了接收广播的优先权,那么MyBroadcastReceiver就可以选择是否允许广播继 续传递了。修改MyBroadcastReceiver中的代码

public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();abortBroadcast();}
}

如果在onReceive()方法中调用了 abortBroadcast ()方法,就表示将这条广播截断,后面
的广播接收器将无法再接收到这条广播。现在重新运行程序,并点击一下Send Broadcast按钮, 你会发现,只有MyBroadcastReceiver中的Toast信息能够弹出,说明这条广播经过MyBroadcast- Receiver之后确实是终止传递了。

使用本地广播

前面我们发送和接收的广播全部属于系统全局广播,即发出的广播可以被其他任何应用程序 接收到,并且我们也可以接收来自于其他任何应用程序的广播。

为了能够简单地解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制 发岀的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出 的广播

修改MainActivity中的代码

在这里插入图片描述
在这里插入图片描述
首先是通过LocalBroadcastManager的getlnstance()方 法得到了它的一个实例,然后在注册广播接收器的时候调用的是LocalBroadcastManager的 registerReceiver ()方法,在发送广播的时候调用的是 LocalBroadcastManager 的 sendBroadcast () 方法

本地广播是无法通过静态注册的方式来接收的

广播的最佳实践一实现强制下线功能

新建一个 BroadcastBestPractice项目,先创建一个Activitycollector类用于管理所有的活动

public class ActivityCollector {public static List<Activity> 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 {@Overrideprotected void onCreate(Bundle savedlnstanceState) { superonCreate(savedlnstanceState); 		ActivityCollector.addActivity(this);}@0verrideprotected void onDestroy() { super.onDestroyO; Activitycollector.removeActivity(this);)
}

首先需要创建一个登录界面的活动,新建LoginActivity,并让Android Studio帮我们自 动生成相应的布局文件。然后编辑布局文件activityjogin.xml

在这里插入图片描述
在这里插入图片描述

修改LoginActivity中的代码

在这里插入图片描述
在这里插入图片描述
这里我们模拟了一个非常简单的登录功能。首先要将LoginActivity的继承结构改成继承自 BaseActivity,然后调用findViewById()方法分别获取到账号输入框、密码输入框以及登录按钮 的实例。接着在登录按钮的点击事件里面对输入的账号和密码进行判断,如果账号是admin并且 密码是123456,就认为登录成功并跳转到MainActivity,否则就提示用户账号或密码错误。
因此,你就可以将MainActivity理解成是登录成功后进入的程序主界面了,这里我们并不需 要在主界面里提供什么花哨的功能,只需要加入强制下线功能就可以了,修改aCtivity_main.xml 中的代码,如下所示:
在这里插入图片描述

然后修改MainActivity中的代码

public class MainActivity extends BaseActivity {@Overrideprotected void onCreate(Bundle savedlnstanceState) ( super.onCreate(savedlnstanceState); 	setContentView(R.layout.activitymain);Button forceOffline = (Button) findViewByld(R.id.force_offline); forceOffline.setOnClickListener(new View.OnCtickListener() { @Overridepublic void onClick(View v) { Intent intent = new Intent("com.example.broadcastbestpractice.FORCE_OFFLINEH"); sendBroadcast(intent);} })}
}

不过这里有个重点,我们在按钮的点击事件里面发送了一条广播,广播的值 为 com.example.broadcastbestpractice.FORCE OFFLINE,这条广播就是用于通知程序强制 用户下线的。也就是说强制用户下线的逻辑并不是写在MainActivity里的,而是应该写在接收这 条广播的广播接收器里面,这样强制下线的功能就不会依附于任何的界面,不管是在程序的任何 地方,只需要发出这样一条广播,就可以完成强制下线的操作了。

只需要在BaseActivity中动态注册一个广播接收 器就可以了,因为所有的活动都是继承自BaseActivity的。

修改BaseActivity中的代码:
在这里插入图片描述
在这里插入图片描述

先来看一下ForceOfflineReceiver中的代码,这次onReceive()方法里可不再是仅仅弹出一 个Toast 了,而是加入了较多的代码,那我们就来仔细地看看吧。首先肯定是使用 AlertDialog.Builder来构建一个对话框,注意这里一定要调用setCancelable()方法将对话 框设为不可取消,否则用户按一下Back键就可以关闭对话框继续使用程序了。然后使用 setPositiveButton()方法来给对话框注册确定按钮,当用户点击了确定按钮时,就调用 ActivityCollector的finishAll()方法来销毁掉所有活动,并重新启动LoginActivity这个活动。
再来看一下我们是怎么注册ForceOfflineReceiver这个广播接收器的,可以看到,这里重写了 onResumeO和onPause()这两个生命周期函数,然后分别在这两个方法里注册和取消注册了 ForceOfflineReceiver .
.
接下来我们还需要对AndroidManifest.xml进行修改

在这里插入图片描述

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 《外星人入侵》之计分功能

    计分和游戏控制 我们在玩游戏时,都有计分的制度,随着分数的增长,玩家玩游戏的精神也在增长,哈哈。 并且游戏都有一个控制按钮,比如开始,或者结束。 1.添加Play按钮 我们先让游戏一开始处于非活动状态,并提示玩家单击Play按钮来开始游戏。为此,在game_stats.py中添加代码…...

    2024/4/28 3:28:49
  2. 希尔排序--java实现

    希尔排序的java实现 希尔排序是插入排序的一种优化版本,比插入排序更高效。 原理:选定增量h并按照h将元素分为若干组,对分好的每一组都进行插入排序,然后减小增量h的值并重复上述操作,直至h=1。 比如给出乱序数组{66,32,59,13,7,21,256,1},设定h=4;过程如下: (1)按h=…...

    2024/4/24 11:21:55
  3. LeetCode js题解 两数之和I/II/IV、三数之和/最接近的三数之和

    把两数之和和三数之和的题目都刷了一遍,熟悉一下这类题。两数之和 题源:https://leetcode-cn.com/problems/two-sum 题解 通过目标数减去当前数,在哈希表中寻找存在的组合,两次遍历可以完成,当然还可以缩减到一次遍历。 这种类似于用哈希表做登记的思路是比较简单也容易想…...

    2024/4/26 18:31:22
  4. leetcode刷题记录(1)

    1.两数之和题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。初版思路:记录每一个数的值和下标,然后找到对应的差的下标,如…...

    2024/4/24 11:21:54
  5. 一个简单三层神经网络BP算法的公式推导

    一个简单的三层神经网络BP算法的公式推导神经网络表示梯度下降法前向误差传播反向误差传播 神经网络表示 让我们来看一个最简单的神经网络,该神经网络只有三层,分别是输入层,隐藏层和输出层。为了表示方便,我们把线性函数和非线性函数分开,神经网络可以画成如下:其中φ(x…...

    2024/4/28 4:06:34
  6. golang 性能剖析pprof

    golang 性能剖析pprof pprof 简介 pprof 是用于可视化和分析性能分析数据的工具. 功能CPU Profiling:CPU 分析, 按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况, 可确定应用程序在主动消耗 CPU 周期时花费时间的位置. Memory Profiling:内存分析, 在应用程序…...

    2024/4/24 8:20:32
  7. 【C++ 系列笔记】C++ 面向对象进阶

    ContentC++ 面向对象进阶继承 - 基础继承中的对象模型继承中的构造和析构继承中的同名处理不会继承的函数继承 - 进阶多继承虚继承多态 - 基础静态多态和动态多态动态多态原理解析开闭原则多态 - 进阶纯虚函数和抽象类虚析构和纯虚析构 C++ 面向对象进阶 继承 - 基础 class Bas…...

    2024/4/22 14:24:18
  8. JavaWeb开发--简易论坛--4全文搜索

    简易论坛–全文搜索 1、思路 2、使用技术或方法 mybatis,依赖注入,SpringMVC,MVC,thymeleaf,Elasticsearch3、关键代码 3.1、关键类 ElasticsearchTemplate/*** 该类使用了ES建立索引,并对应*/ //shards:分片数,replicas:副本数 @Document(indexName = "discusspost&q…...

    2024/4/25 12:11:25
  9. Loadrunner 负载生成器

    对场景进行设计后,需要对负载生成进行管理和配置,Load Generators是运行脚本的负载引擎,(相当于加压机)主要功能是生成虚拟用户进行负载,在默认情况下使用本地的负载生成器来运行脚本点击添加,然后点击连接但是每生成一个虚拟用户,需要花费负载生成器大约1-3M的内存空间…...

    2024/4/26 10:29:43
  10. 入门 - 07 - Java程序运行机制

    入门 - 07 - Java程序运行机制 在计算机的高级编程类型分为两种: 一、编译型(compile) 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依…...

    2024/4/27 8:42:37
  11. python docx 模块替换 word内容

    from docx import Document doc = Document(r’D:\python\Python37\testWord\卢祥和.docx’) ‘’’ paragraph = document.add_paragraph(‘这是个段落11。’) #将一段新文本添加到文档末尾 prior_paragraph = paragraph.insert_paragraph_before(‘这是前面的段落11。’) pa…...

    2024/4/19 18:31:11
  12. (纪中)1397. 寻找星座 (Standard IO)

    时间限制: 1000 ms 空间限制: 131072 KB 具体限制 Goto ProblemSet题目描述 现在你在一张卫星图片中寻找星座,已知该星座在图片中正好出现一次,而且形状一样,方向一样,大小也一样。注意图片中可能有一些与该星座无关的星星。例如图111中的星座出现在图222的卫星图片中(用…...

    2024/4/28 0:24:49
  13. Pandas-03-文件读和存储

    以pandas读.csv文件和存储为.csv文件为例。版权声明:本文为博主原创文章,转载请注明原文出处,禁止白嫖!写作时间:2020-06-06 18:42目录1、pandas.read_csv读取文件2、快速浏览读入的数据3、pandas.DataFrame.to_csv写入文件4、参考资料 pandas非常擅长处理表格型数据,pan…...

    2024/4/27 23:36:25
  14. 直通车优化 提分 关键词 展现位置 相关性 买家体验 优化秘术:提升质量得分,打爆自然流量!

    话不多说直奔主题。 一个店铺想要长久良好的生存下去,那么店铺必须要有足够的流量作来维持,但也并不意味着什么流量都是来者不拒的。 流量可以分为付费和免费这两流量。一个店铺光靠付费流量肯定是不行的,做推广引流的目的,就是去通过付费去获取免费流量,这才是我们的初衷。…...

    2024/4/24 11:21:54
  15. 极大似然估计、最大后验概率估计和贝叶斯估计

    We can interpret the Bayes’ Rule...

    2024/4/24 11:21:50
  16. 手写分布式爬虫框架

    目录分布式爬虫框架 Demo起因弊端目标用最简单的代码实现一个爬虫建立爬虫模型(接口)使用集群,异构需要改动的点分布式后语 分布式爬虫框架 Demo 记录用Java开发一个简单的分布式爬虫框架,从最开始的十几行代码到开发一个支持集群、分布式的爬虫框架。 代码地址:单机版本 …...

    2024/4/26 0:42:51
  17. 《Spring Boot+Vue全站开发指南》第7章笔记:构建RESTFul服务

    构建RESTful服务 本章概要REST简介 JPA实现REST MongoDB实现REST7.1 REST简介 REST(Representational State Transfer)是一种Web软件架构风格,它是风格而不是标准,匹配或兼容这种架构风格的网络服务称为REST服务。REST服务简洁并且有层次,REST常基于HTTP、URI和XML以及HTM…...

    2024/4/24 11:21:49
  18. 立习习学python——第二天

    Python基础(二)赋值常量最基本内置数据类型数字布尔值字符串 赋值 1.链式赋值 x=y=123注意:变量x、y的地址是相同的。运行结果如下:2. 系列解包赋值 a,b,c=1,2,3应用:实现变量互换 c,d=4,6 c,d=d,c而在C语言中,需要另外一个变量进行倒腾。 常量 Python不支持常量,我们只…...

    2024/4/24 11:21:50
  19. LeetCode(top100)任务调度器

    任务调度器 题目描述 给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。 然而…...

    2024/4/27 15:17:31
  20. HTML布局

    HTML 布局 - 使用 元素 div 元素是用于分组 HTML 元素的块级元素。 下面的例子使用五个 div 元素来创建多列布局: 实例666 主要的网页标题菜单 HTML CSS JavaScript内容在这里66666尝试一下 上面的 HTML 代码会产生如下结果:  HTML 布局 - 使用表格 使用 HTML 标签是创建…...

    2024/4/24 11:21:45

最新文章

  1. 香港BTC、ETH现货ETF同时通过,对行业意义几何?

    香港比美国更快一步通过以太坊现货 ETF。 2024 年 4 月 15 日&#xff0c;香港嘉实国际资产管理有限公司&#xff08;Harvest Global Investments&#xff09;今天宣布&#xff0c;得到香港证监会的原则上批准&#xff0c;将推出两大数字资产&#xff08;比特币及以太坊&#…...

    2024/4/28 4:08:43
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Stable Diffusion的界面参数详解

    Stable Diffusion作为一款强大的文本到图像生成模型,其界面参数是用户与模型进行交互的重要桥梁。这些参数不仅影响着模型的生成效果,还能够帮助用户更加精准地控制生成图像的风格、内容等。本文将详细介绍Stable Diffusion的界面参数,帮助用户更好地理解和应用这一工具。 …...

    2024/4/25 11:56:34
  4. 【Web爬虫】爬⾍⿊⻰江省与四川省农机补贴以及数据分析

    目录 一、实验目的 二、实验内容 2.1 实验爬取数据选择 2.2python代码爬取数据 2.3数据处理与分析 三、实验原理 3.1 python 连接网页的两种方式 3.1.1 使用requests连接网页 3.1.2 使用from selenium import webdriver连接网页&#xff0c;创建网页测试 3.2 python …...

    2024/4/26 21:47:34
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57