iPhone也可以快充哟

很多人都在拿Android的快充,嘲笑iPhone的万年不变的5w充电头

先来普及下快充知识吧

想要充电快,

除了得有快充头之外,

还得需要手机支持相关的快充协议、充电IC手机电池等等

如何正确的实现快充呢?

首先按照自己的手机充电协议,

选购一个合适的快充头!

首先,我们先了解下,

市面上主流的快充协议。

 

我们不根据各个手机品牌的快充展开。

对于快充,

高通有着自己的一套解决方案,

那就是QC协议

我们平时看见QC2.0

QC3.0QC4.0之类的,

这些都是高通的协议。


因为使用其芯片的厂商众多,

所以高通的QC

也是目前使用范围最广的快充协议


基本上使用高通芯片的手机,

都在使用QC协议。

当然也有一些定制版的我们不展开


这里还要说另外一大类快充协议SCP。

在早期华为曾使用的是FCP充电协议

(全称:FAST CHARGE PROTOCOL

而近年来则是使用的SCP协议

(全称:SUPER CHARGE PROTOCOL

不过SCP一般用在自家的旗舰级别的手机上。

 

除了上述的两个类型协议之外,

还有一个USB PD协议,

这也是迄今为止,

苹果唯一支持的快充协议

是的,你没有听错,

常年使用5W1A的苹果

也是支持快的。

其实在iPhone8开始,

苹果便支持了PD快充,

然而却没有太多的人知道,

也就浪费了iPhone的这个能力。

 

和上面两种充电协议不同,

USB PD要求使用的充电接口

必须为Type-C接口

(使用Type-C接口的充电器,

不一定就是PD快充)

这里的充电接口指的是充电头上的接口

喏,就是这样:

 

好了,明白了以上的几种

主流的快充协议之后,

我们再来选择合适的快充头吧。

 

如果你是iPhone用户,

那么iPhone8开始

所有的iPhone设备都是支持 

因为,如果我们购买的充电头协议不兼容的话,

手机是不会被激活快充的。

因为,在谷歌的推动下,

现在的USB PD

已经收编了QC快充协议3.04.0),

而最新的PD3.0

支持了华为的SCPFCP协议

甚至还支持MTKPE快充2.03.0)。

 

你可能会好奇,

为什么谷歌推动了

这么多厂商支持USB PD呢?


那是因为谷歌早在最新的

Android 7.0 OEM规范中就强调了,

使用USB接口的手机,

快充技术必须支持USB PD

 

如果是iPhone快充

出来购买支持PD的快充头之外

还需要CLightning接口的连接线。

 

好啦,就是这样了,

苹果用户的你也可以拥有

充电五分钟,通话两小时

的绝佳体验了。

只需一行代码完成多语言切换

背景

之前总是有开发者反馈我应用切换了语言,可是工具类获取的 string 却没有发生改变。其实这个问题很简单,你切换语言的 Context 只作用在了你的 Activity 上,并没有对你的 Application 做同样的操作,知道了这点,那么解决问题就很简单了,为了省事,我给大家封装了 LanguageUtils,直接一行代码便可完成多语言的切换,类似微信的语言切换分分钟便可完成。

使用

Gradle:

implementation ‘com.blankj:utilcode:latest_version’

APIs

语言相关 -> LanguageUtils.java -> Demo

applySystemLanguage: 应用系统语言

applyLanguage      : 

原理

如果我们的应用不设置 android:configChanges=”locale|layoutDirection”,那么应用是跟随系统语言设置的变化而变化的,比如你应用适配了英语(values-en-rUS)和简体中文(values-zh-rCN),那么你去设置里切换成英语的话,返回到你应用中,你的 Activity 会重新创建一遍,把 Activity#Resource#Configuration#Locale 设置为当前系统语言,这样就达到了跟随系统语言设置的变化而变化,但 Application 并没有重启,所以这就导致了一开说到的问题。

要解决跟随系统变化这一点的话,只需要在 Activity#onCreate 的生命周期中把 Application#Resource#Configuration#Locale 设置为系统的 Locale 即可,那么系统的 Locale 怎么读取呢,知道之前屏幕适配方案的人应该也能想到这一方式:

Resources.getSystem().getConfiguration().locale,这样,我们的 Application 便也切换成了系统语言,注意更新 Locale 需要兼容下高版本,调用具体代码可以参照如下:

private static void updateLanguage(Context context, Locale locale) {

    Resources resources = context.getResources();

    Configuration config = resources.getConfiguration();

    Locale contextLocale = config.locale;

    if (equals(contextLocale.getLanguage(), locale.getLanguage())

            && equals(contextLocale.getCountry(), locale.getCountry())) {

        return;

    }

    DisplayMetrics dm = resources.getDisplayMetrics();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

        config.setLocale(locale);

        context.createConfigurationContext(config);

    } else {

        config.locale = locale;

    }

    resources.updateConfiguration(config, dm);

}

那么如果是应用内切换语言呢?我们可以仿照系统切换语言的方式,把我们自己所有的 Activity 全关掉,然后启动首页的 Activity 即可,在打开的 Activity#onCreate 中把 Activity 和 Application 的 Locale 都设置为我们设置的语言即可,当然,这份设置是需要保存下来的,根据你的需求来确定是要保存在服务端还是本地。那么怎么关闭所有的 Activity 呢?我们可以通过增加 Intent 的 flag 为 Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK 即可,相关代码如下所示:

private static void applyLanguage(@NonNull final Locale locale,

                                  final String activityClassName,

                                  final boolean isFollowSystem) {

    if (isFollowSystem) {// 如果是跟随系统,那么 sp 就什么都不存

        SPUtils.getInstance().put(KEY_LOCALE, “”);

    } else {// 否则把设置的语言保存下来,在 onCreate 中应用该语言

        String localLanguage = locale.getLanguage();

        String localCountry = locale.getCountry();

        SPUtils.getInstance().put(KEY_LOCALE, localLanguage + “$” + localCountry);

    }

    updateLanguage(Utils.getApp(), locale);// 更新 Application 的语言

    Intent intent = new Intent();

    String realActivityClassName// 如果传入的 activityClassName 为空,那么启动 launcher Activity。

            = TextUtils.isEmpty(activityClassName) ? getLauncherActivity() : activityClassName;

    intent.setComponent(new ComponentName(Utils.getApp(), realActivityClassName));

    intent.addFlags(

            Intent.FLAG_ACTIVITY_NEW_TASK

                    | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK

    );

    Utils.getApp().startActivity(intent);// 关闭其他 Activity 并启动 realActivityClassName 的 Activity

}

// 工具类调用此函数是在 ActivityLifecycleCallbacks#onActivityCreated 中

static void applyLanguage(@NonNull final Activity activity) {

    final String spLocale = SPUtils.getInstance().getString(KEY_LOCALE);// 获取保存的语言

    if (TextUtils.isEmpty(spLocale)) {// 为空说明是跟随系统走,那么更新系统语言即可

        Locale sysLocale = Resources.getSystem().getConfiguration().locale;

        updateLanguage(Utils.getApp(), sysLocale);

        updateLanguage(activity, sysLocale);

        return;

    }

    // 读取 sp 保存下来的语言并应用该语言

    String[] language_country = spLocale.split(“\\$”);

    if (language_country.length != 2) {

        Log.e(“LanguageUtils”, “The string of ” + spLocale + ” is not in the correct format.”);

        return;

    }

    Locale settingLocale = new Locale(language_country[0], language_country[1]);

    updateLanguage(Utils.getApp(), settingLocale);

    updateLanguage(activity, settingLocale);

}

基于以上分析:

• 如果应用是跟随系统设置语言来切换的话,那么直接依赖我的工具类即可,它会自动帮你更新 Application 的语言。

• 如果需要应用内切换语言的话,只需在你切换语言的地方调用 LanguageUtils.applyLanguage(Locale.你要设置的语言, “com.blankj.launcher.pkg.MainActivity/* 切换语言后你要跳转到的页面,如果为空,则启动应用的 launcher Activity */”) 即可;

• 如果需要应用内切换语言变为跟随系统设置语言,那么调用 LanguageUtils.applySystemLanguage(“”/* 切换语言后你要跳转到的页面,如果为空,则启动应用的 launcher Activity */); 即可。

结语

功能其实很简单,但总是缺少人能把它分析得透彻,从而做得很完美分享出来,希望我这次的分享能让你看到这一点,从而提升你之后的技能。

作者:blankj

链接:https://juejin.im/post/5d1970dd6fb9a07ee63f7c79

苹果今年发布的三款iPhone 将有两大技术升级

9to5Mac 最新报道,苹果今年将会与去年类似,推出三款全新 iPhone,带来不少新变化。

报道称,消息来自于曾亲眼见到新设备的知情人士。据称三款全新 iPhone 机型仍会采用 Lightning 端口,并非之前传闻中的改用 USB-C 端口。

三款手机都会搭载全新 A13 芯片,内部平台代号为 Cebu,机型编号为 T8030。其中代号为 D42iPhone 12,3)的机型将会取代 iPhone XS;代号为 D43iPhone 12,5)的机型将会取代 iPhone XS Max;而代号为 N104iPhone 12,1 的机型将会取代 iPhone XRD42 D43 将会配置 @3x OLED 视网膜显示屏,而 N104 则仍是 @2x Liquid 视网膜显示屏。三款新手机的屏幕分辨率与前代保持不变。

取代 iPhone XS/XS Max 的机型将会搭载后置三摄,摄像头位于背部的方形凸起区域中。信息源透露,实物与目前广为传播的渲染图十分相似。扩大突起区域是为了容纳一枚可以拍摄广角影像的摄像头。

新增加的摄像头可以让新款 iPhone 实现一种全新的名为 Smart Frame 的功能,可以捕捉照片和视频的画框区域周围的区域,这样用户在后期处理上就可以调整画框或者进行自动透视和裁剪矫正等操作。基于隐私原因,额外的信息将会保留一段有限的时间并随后自动删除。

另外新 iPhone 的前置摄像头也会升级,增加 120fps 慢动作视频录制支持。

俄罗斯联邦安全局遭受史上最大的黑客攻击,7.5TB数据被盗

据外媒报道,黑客入侵俄罗斯联邦安全局(FSB)服务器,他们从FSB的主要承包商“Sytech”处获得了7.5TB的数据。入侵者泄露了与非公共互联网项目有关的数十个数据,例如俄罗斯如何对Tor浏览器用户进行去匿名化,收集有关社交网络用户的信息,以及将俄罗斯互联网业务与世界其他地区隔离。

 

攻击于2019713日由一个不知名的黑客组织0v1ru $发起,他们最近创建了Twitter帐户,发布了属于受攻击计算机的文件夹截图。在他们在Twitter中发布的不同图片中,一张图片显示了信息总量——7.5TB

 

在攻击过程中,黑客还顺手用一个“Yoba-face”破坏了该公司的网站,这是一个受俄罗斯用户欢迎的表情符号。

 


除了这个图像,黑客还发布了内部网络的界面,后来将这些文件发送给另一个名为DigitalRevolution(数字革命)的黑客组织。数字革命将这些数据分享给了俄罗斯几家媒体。

 

根据俄罗斯媒体的报道,这些文件表明,自2009年以来,SyTech已经为FSB和同行承包商Quantum开展了多个项目。项目包括:

 

Nautilus – 一个收集社交媒体用户(FacebookMySpaceLinkedIn)数据的项目。

 

Nautilus-S – 在流氓Tor服务器的帮助下对Tor流量进行去匿名化的项目。

 

Reward – 一个暗中渗透P2P网络的项目,就像BT网络一样。

 

Mentor – 一个监控和搜索俄罗斯公司服务器上的电子邮件通信的项目。

 

Hope – 一个调查俄罗斯互联网拓扑及其与其他国家网络连接的项目。

 

Tax-3 – 一个用于创建封闭内联网的项目,用于存储高度敏感的州级人员,法官和当地政府官员的信息,与该州的其他IT网络分开。

 


另有文件显示,还有其他较旧的项目用于研究其他网络协议,如Jabber(即时通讯)ED2K(eDonkey)OpenFT(企业文件传输)

 

数字革命Twitter账户上发布的其他文件声称,FSB也在跟踪学生和养老金领取者。被黑客入侵的SyTech公司自黑客入侵以来一直关闭其网站并拒绝媒体采访。

注:本文由E安全编译报道,转载请注明原文地址

https://www.easyaq.com