作者 | 小谦
责编 | 郭芮
在2018年出现多次危机后,2019年的苹果依旧没有获得一个好开头。
1月7日,在2019年CES即将开幕之际,苹果突然宣布与其死对头三星达成深度的内容合作,iTunes电影和电视内容将可以在三星电视上进行播放。一时间,这一消息引发全球科技行业的热议。
对于以“封闭”闻名的苹果来说,苹果会与三星进行内容合作,这无疑是一个艰难的决定。这不仅释放出苹果想要力求开放的态度,同时也说明苹果的发展难题比想象中或许还要复杂。
库克下调营收预期或许就是一个前奏。1月3日,苹果CEO库克在致投资者的一封信中表示,“苹果2019年第一季度财报将于1月29日发布,营收预计为840亿美元”。这封信一经曝出,瞬间让苹果的股价暴跌,跌幅高达10%。
要知道,苹果此前的营收预期是930亿美元。这是苹果20年来首次下调预期,冲击力不逊于当年苹果的灵魂人物乔布斯的离世。整整90亿美金的差距,苹果认为这与其在中国市场的表现有关。
不可否认的是,全球的智能手机行业增速在放缓,但中国的智能手机市场还是处于增长的阶段,为什么各大国产手机的销量在高速提升,而苹果在中国的市场份额却越来越少?这背后,或许还暗藏着苹果公司更大的危机。
从万亿市值到三个月缩水4200亿,苹果正在走下神坛
去年10月,苹果以233.47美元每股的成绩,创下市值达到1.12万亿美元的奇迹,苹果也成为全球首家市值破万亿的科技公司,这一刻应该算是苹果历史上的高光时刻。
但随后几个月到现在,苹果的市值就一路下跌,目前股价仅为146美元。有细心的人发现,苹果三个月就跌了4200亿美元,相当于Facebook的市值。尤其是在此次库克的公开信传播后,谷歌单日跌幅高达近10%,创下苹果股价下跌的新纪录。
从这些迹象来看,苹果正在走下神坛。不可否认的是,正如库克自己所言一般,苹果股价大跌和营收预期下调,这和苹果在中国智能手机市场失去绝对的优势或许有直接关系。
在大量的国产手机品牌崛起背后,恰是苹果、三星这些高端国际手机品牌销量下滑的开始。根据数据统计公司Counterpoint公布的2018年第三季度中国市场智能手机销量排名显示,以华为、vivo、OPPO等为代表的品牌稳占第三季度销量排行榜Top 5。其中苹果同比下降17%,排名跌落至第六,市占率仅为7.7%。
Counterpoint公布的2018Q3中国智能手机市场销量(图源见水印)
在投资者公开信中,库克将这次业绩没达到预期的原因归结为:错误低估了一些核心新兴市场经济放缓的程度,特别是大中华区对iPhone手机需求的放缓。虽然最近几年包括库克在内的苹果高管对中国市场也越来越感兴趣,但每次新品发布给到中国消费者的价格实在是不够诚意。
将大中华地区作为苹果营收下降的背锅侠,这个帽子扣得确实有点高。在销量下滑的情况下,苹果还不如思考为什么越来越多用户要选择国产手机品牌而不是苹果?这或许才是苹果在大中华区乃至于全世界备受挑战的核心原因。
为什么越来越多中国消费者遗弃苹果?苹果始终对中国市场缺乏敬畏心
从某种意义上来说,苹果乃至于整个手机行业出现营收暂缓甚至营收下降的情况,其实也是正常的一件事情。早在1965年,英特尔公司联合创始人戈登·摩尔就曾提出摩尔定律,预测密实集成电路板上使用的晶体管数量每隔两年就会翻一番。在通常情况下,这个定律被推断适用于整个硬件行业,几乎每隔几年很多硬件产品就更新换代了。
但是,在智能手机盘子还持续在增大的过程中,越来越多中国消费者却选择遗忘苹果,这其实才是苹果最危险的地方。那么,为什么消费者会选择其他品牌的手机产品呢?这或许直接关系着苹果能否解决当下的发展危机。
1、苹果新品创新力度不够,价格也缺乏诚意
苹果,以产品创新闻名行业,以颠覆式创新而打响全世界名声。但从iphone8开始,苹果手机的创新力度就显得有些差强人意,尤其是新产品iPhone XS和iPhone XS Max被吐槽的问题空前之多,让不少还使用着iphone7/8系列的用户犹豫不决。
根据网友们的反馈,除却因部分不完善的前沿技术运用而出现的各种乌龙以外,包括假防水、电池差、信号不好、机身发热等问题,也让不少人望而却步。同时,苹果这些新功能,也难以真正吸引消费者们产生购买决策,这就成为其销量下滑的一个重要原因。
更为关键的是,在产品本身没有太多吸引力的情况下,苹果的新品竟然还要进行涨价,甚至还对一些内存版本进行单独的处理,让消费者无法去根据自己的需求,做出最具性价比的消费选择。
苹果产品在中国的价格一如既往的昂贵,骨子里并不重视中国市场的用户。比如苹果的iPhone XS Max在中国市场的售价高达9599元,而华为Mate20 Pro售价却只有5999元,整整高出60%。两款手机差距并不大,可是售价差距太大。这样一来,消费者们也更易去买那些服务更好的手机品牌。
左为iPhone XS Max,右为华为Mate20 Pro(图源自产品官网)
2、专利诉讼案败诉后,苹果销量也备受影响
除了苹果自身的问题重重之外,曾经占据智能手机高端市场的苹果还面临劲敌对手的围剿,尤其是国产手机品牌的快速崛起,成为抗衡苹果手机的不可小看的力量。因此,强大的外患也是苹果无法绕过的坎,不论是专利技术还是竞争对手的围追堵截,都让苹果手机销量面临很大的压力。
比如前段时间,苹果跟高通的专利诉讼案败诉,苹果有些产品被在市场上被禁止售卖。去年12月10日晚,高通宣布和苹果的一项专利纠纷案获胜,福州市中级人民法院裁定批准了高通对苹果iPhone的临时销售禁令,被禁售的产品包括了iPhone 6s/6s Plus、iPhone 7/7 Plus、iPhone 8/8 Plus和iPhone X在内的7款设备。
虽说这几款产品并非是苹果的最新款,但是一定程度上也会影响苹果的销量。
3、国产手机借服务质量崛起,爱国情怀助力国产手机走全球
也正是在苹果创新乏力的情况下,国内的诸多国产手机品牌的硬件标准也朝着苹果不断前进。在三星手机业务的市场份额几乎被忽略之后,以华为、OPPO、vivo、小米为代表的国产手机,凭借着持续优化的安卓系统与高配置的硬件,在体验重度游戏过程中也可以畅玩游戏。
如今,很多国产手机与苹果相比,针对游戏、音乐、聊天等需求的服务,有些甚至比苹果的服务都还要更好。在处理器方面,2018年9月,苹果发布了新一代处理器A12,而其后发布的华为麒麟980和高通骁龙855正在缩小与A12的差距。至于拍照、续航、卡顿、发热情况等方面,很多安卓旗舰机甚至都可以吊打iPhone,这对于苹果来说无疑是个糟糕的消息。
你会发现,以前用户使用苹果手机代表的是一种身份,可现在用户也看重手机品牌对待消费者的态度。手机品牌越重视消费者,自然会把消费者需求放第一位,反观苹果近年来对待中国市场的消费者并未有太大的转变,仍然是保持高高在上的姿态,不利于拉近用户跟品牌之间的联系。国产品牌为了更好的服务消费者,则通过各种方式来增加跟用户的情感。
同时,在春节过年和爱国情绪的影响下,一定程度上也会让国人在特殊时期选择支持国产品牌。今年因为部分摩擦,国内企业华为也受到一些影响。前段时间华为事件也算是个导火线,更加激发国内用户的爱国情绪,短期内来看用户如果打算换新机可能还是会倾向于选择国产手机,毕竟苹果现在的新款手机价格都快一万,一万换新机的成本还是不低。
从上面这些因素来看,苹果业绩出现下降其实是有迹可循的,并非只是因为某个原因造成现在的局面。
对于苹果来说,它在智能手机领域曾经占据了很长一段时间的霸主地位,但手机行业并不可能一直有常青树,前有诺基亚这样的巨头倒下,苹果未来要想继续找回自己的优势,也许还是要从多方面下功夫努力。
2019年对于苹果既危险也充满机遇,保持创新寻求新的智能硬件增长也很关键
4个月前,库克的人生还在巅峰与高潮,4个月之后,直接跌到谷底。过去几个月的时间,可谓是让苹果经历了一次过山车的体验,人生的大起大落虽然刺激,但足够给库克更多的反思与总结。
对于苹果而言,其正处在一个风口浪尖之处。在智能手机又一次迎来技术大变革的当下,苹果能否抓住这些机会满足好用户的需求,并且形成新的商业模式,着实非常关键。随着5G商用临近,手机品牌商都在积极布局IoT抢占下一个入口,苹果究竟要如何做才能尽可能避免沦为“下一个摩托罗拉”呢?
1、IoT成手机品牌发力的重点,苹果需构建全新的生态
苹果与三星合作的消息,让苹果系统开放性的讨论引发热议。坦诚地说,在硬件方面尤其是在系统方面,苹果是有优势的。
在物联网这个市场上,能否在软硬件市场的获得一些优势地位,这直接决定了谷歌在5G技术商用时代是抓住机会还是迎接挑战。
当下不论是手机品牌还是互联网巨头像谷歌、微软、以及国内的BAT都对智能家居虎视眈眈。对于苹果来说,其能否在IoT这个生态站稳脚跟并建立自己的一些合适优势,这就直接决定了苹果能否通过完善的生态而取胜,重新在5G时代获得一大批消费者的认可。
2、加大力度重视中国市场,降低价格提升产品服务都非常关键
苹果给很多中国消费者留下的印象,很多都离不开“傲慢”这两个字。库克意识到中国市场会严重影响到苹果整体营业额,那么库克也应该知道苹果要在中国把线下的市场做起来,最关键的还是需要沉下心来,需要更接近消费者的需求,才有可能在服务水平方面与其他国产手机相提并论。
与其他的国产手机相比,如果平台的价格、产品服务都没有独特的模式或者更有优势服务质量,那么苹果自然也很难吸引更多消费者的认可。
对于苹果来说,中国市场始终是其最值得重视的市场。但是,只有真正在降低价格的同时还可以提升产品服务,才有可能吸引和服务到更多的消费者。
因此,整体来说,2019年不管是对于苹果还是对于整个手机行业,都是至关重要的一年。苹果显然还没有走出去至暗时刻,但在苹果选择开放的背后,苹果的未来也多了一丝希望。能否化挑战为机遇,这或许就直接决定了苹果是继续坚守“王位”,还是会成为下一个摩托罗拉。
作者:小谦,互联网观察员,CSDN 特约作者,多家科技媒体专栏作者,运营有个人微信号“小谦笔记”。
声明:本文为 CSDN 「畅言」栏目独家投稿文章。作者独立观点,不代表 CSDN 立场。
「畅言」是 CSDN 公众号专门开设的评论类栏目,针对当前业界发生的大事以及行业痛点,面向所有互联网从业人士,专注于「百家争鸣,各抒己见」。我们相信观点愈辩愈明,摆此擂台,等你来战!只要你的逻辑表达清楚、专业,数据引用准确、可靠,角度独特、话题前沿深入,欢迎投稿,一起畅所欲言!
热 文 推 荐
☞ 1年丢失140亿!你是区块链的受害者吗?|年度安全事件回顾
☞ 华为 36 岁工程师猝死,曾 22 月无休:比挣钱更重要的是活着
☞ Google AI骗过了Google,工程师竟无计可施?
print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"
点击“阅读原文”,打开 CSDN App 阅读更贴心!



一、背景
之前项目中遇到了一个需求,需要使用画中画功能,原本以为将是一个比较小的功能点,但是真正实际走下来发现这样一个小功能实际上有很多坑点,所以总结一下。
二、避坑指北
1、声明支持画中画
在 AndroidManifest.xml 中声明 Activity 支持 PiP:
xml 代码解读复制代码<activity android:name=".YourActivity"
android:supportsPictureInPicture="true" />
2、Android画中画仅支持8以上的机型
小于安卓8的手机就需要隐藏画中画的按钮
3、进入画中画模式:enterPictureInPictureMode
enterPictureInPictureMode 是 Android 中用于将当前 Activity 切换到画中画(PiP)模式的方法。
参数: params: PictureInPictureParams 对象,包含画中画窗口的配置参数
其中我们可以在PictureInPictureParams对象中设置按钮图标。
4、是否是画中画模式:isInPictureInPictureMode()
调用 Activity#isInPictureInPictureMode()可以判断当前是否为画中画模式。
5、画中画状态切换监听
java 代码解读复制代码@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
}
重写 onPictureInPictureModeChanged 用于监听应用进入或退出画中画(Picture-in-Picture, PiP)模式的状态变化。
isInPictureInPictureMode
- true 表示当前进入 PiP 模式
- false 表示退出 PiP 模式
6、画中画权限问题
画中画的功能权限默认都是赋予的,但是也可以通过画中画里面设置按钮,去把这个权限给关闭,这个时候就需要判断此时是否有这个权限,否则就无法开启。
判断权限是否开启的方法:
java 代码解读复制代码public static boolean hasPipPermission(){
AppOpsManager appOpsManager = (AppOpsManager) App.getContext().getSystemService(Context.APP_OPS_SERVICE);
return appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, android.os.Process.myUid(), App.getContext().getPackageName()) == AppOpsManager.MODE_ALLOWED;
}
跳转到系统画中画权限设置页面的代码:
java 代码解读复制代码activity.startActivity(new Intent("android.settings.PICTURE_IN_PICTURE_SETTINGS", Uri.parse("package:" + activity.getPackageName())));
这里需要注意,必须要使用activity来启动Activity,如果用Application Context就无法跳转
7、画中画模式下,功能按钮的设置
第一种可以使用MediaSessionCompat来进行设置,不过这种方式无法替换icon,局限性比较大。就不再介绍了。
第二种可以使用setActions进行设置,也是官方推荐的方式。
这里就有几个细分的问题:
icon的点击事件如何处理
创建Action会传入一个PendingIntent,然后点击之后会发送广播,在广播接收器中添加事件处理。
java 代码解读复制代码private RemoteAction createRemoteAction(int iconResId, String action) {
return new RemoteAction(
Icon.createWithResource(this, iconResId),
"",
"",
PendingIntent.getBroadcast(
this,
0,
new Intent(action),
PendingIntent.FLAG_IMMUTABLE
)
);
}
广播接收器
java 代码解读复制代码private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent == null) {
return;
}
LogWriter.writeLog(TAG, "BroadcastReceiver onReceive() action:" + intent.getAction());
if (ACTION_START.equals(intent.getAction())) {
//
} else if (ACTION_PAUSE.equals(intent.getAction())) {
//
} else if (ACTION_PRE.equals(intent.getAction())) {
//
} else if (ACTION_NEXT.equals(intent.getAction())) {
//
}
}
};
这里还需要注意不同的action都需要注册,否则无法识别这些按钮
java 代码解读复制代码IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_START);
intentFilter.addAction(ACTION_PAUSE);
intentFilter.addAction(ACTION_PRE);
intentFilter.addAction(ACTION_NEXT);
registerReceiver(mBroadcastReceiver, intentFilter);
icon如何动态切换
在需要切换icon的时候,需要调用,来重新刷新配置,来替换icon
scss 代码解读复制代码setPictureInPictureParams(pictureInPictureParams);
广播接收器的问题
因为一般要在广播接收器中去调用setPictureInPictureParams来切换icon。所以必须要注意,需要在Activity的onDestroy()中去反注册广播接收器。 前面的页面内关闭,在新页面也会收到之前页面的广播,在调用setPictureInPictureParams方法时,会爆出token异常的问题。而且也会造成内存泄漏。
8、vivo s7手机打开画中画模式会延迟3500ms左右
如果theme设置了windowIsTranslucent,就会出现这个问题
xml 代码解读复制代码<item name="android:windowIsTranslucent">trueitem>
解决办法:就是把这个参数去掉。
9、部分机型会出现进入画中画时会有白色闪一下的问题(比如折叠屏手机)
解决办法:
在启动画中画时,调用setSourceRectHint()方法,配置视频源的位置。视频源位置,如果直接能获取到,那就直接拿来用。一般情况下只能通过屏幕的位置,以及视频的宽高来进行计算,下面就是计算的方法。
java 代码解读复制代码private Rect getSourceRect(Rational rational){
Rect screenRect = new Rect();
getWebview().getGlobalVisibleRect(screenRect);
float screenRation = (float)screenRect.width() / (float)screenRect.height();
float videoRation = rational.floatValue();
if(videoRation >= screenRation){
int height = (int) (screenRect.width() / videoRation);
int top = (screenRect.height() - height) / 2;
int bottom = top + height;
Rect launchBounds = new Rect(0, top, screenRect.right, bottom);
return launchBounds;
}else{
int width = (int) (videoRation * screenRect.height());
int top = 0;
int left = (screenRect.width() - width) / 2;
int right = left + width;
int bottom = screenRect.bottom;
Rect launchBounds = new Rect(left, top, right, bottom);
return launchBounds;
}
}
10、画中画启动后,其他页面启动,可能会在画中画内部打开
如果画中画以默认形式打开,背后的页面以无activity的模式来打开页面,那么新的页面就会在画中画中被打开。
解决方案:
方案一,背后的页面不能以无activity的模式来打开页面,必须传入activity来打开。这样改动量非常大,而且有些地方只能以无activity的模式来打开页面。这个方案局限性就很大。
方案二,将画中画的Activity设置为新的task
xml代码解读复制代码android:taskAffinity=".webForVideo" android:excludeFromRecents="true"
一般来说,都会搭配excludeFromRecents=true来使用,防止在后台任务页中,出现两个。
11、画中画宽高比的问题
指定宽高比
如果进入画中画模式不指定宽高比的话,就会按照默认的大小来打开画中画,那么竖屏的视频也会按照横屏的形式来播放。可以调用来指定宽高比。
java代码解读复制代码setAspectRatio()
宽高比限制问题
根据系统提示,画中画宽高比是有大小限制的,最大是239:100 最小是100:239,如果设置的宽高比超过了这个限制,那么就会出现报错。
所以就需要添加限制,超过最大值,就以最大值进行展示。
Java 代码解读复制代码Rational aspectRatio = new Rational(mVideoUrlBean.getWidth(), mVideoUrlBean.getHeight());
//限定最大值与最小值 1:2.39 2.39:1 否则会crash
Rational maxAspectRatio = new Rational(239, 100);
Rational minAspectRatio = new Rational(100, 239);
if (aspectRatio.floatValue() > maxAspectRatio.floatValue()) {
aspectRatio = maxAspectRatio;
} else if (aspectRatio.floatValue() < minAspectRatio.floatValue()) {
aspectRatio = minAspectRatio;
}
builder.setAspectRatio(aspectRatio);
12、直接进入画中画不够丝滑
如果使用ARoute的方式来启动需要画中画的页面,那么在页面跳转、关闭的时候,会有动画。所以一般的情况下,这些动画都不需要,所以可以采用默认的startActivity(new Intent())的方式来启动。
13、画中画,大小切换时,大部分机型会出现闪烁
大概原因定位到是,大小切换时,会走onConfigChange(),在onConfigChange时,WebView会重新布局,从而导致了闪烁,但是不好修复。查看了官方的demo也有这个问题,所以还需要再看看有没有其他办法解决。
14、直接以画中画模式打开,会先出现黑影
目前直接以画中画模式打开,是先打开主体页面,然后再开启画中画。因为主体页面是黑色的,所有会出现黑影闪过。看后面是否可以先将主体页面设置为透明色。不过目前页面设置为透明色还有很多问题。官方demo直接以画中画形式打开也会存在黑影的情况。
三、总结
以上大致总结了一下,在开发以及测试过程中遇到的一些坑点,虽然比较细碎,但是都是实际的项目经验,希望能够读者带来一些思考。
评论记录:
回复评论: