oppo手机oppor9有没有nfc这个功能,比如一下找不到它说一句话,你在那它就回答我在这里

您访问的帖子暂时无法查看_帖子_OPPO手机官方社区
12:11 172 17
您访问的帖子暂时无法查看
由于历史数据升级的需要,您访问的帖子暂时无法查看,请留意开放公告。
本次发糖数
关于我们:&figure&&img src=&https://pic3.zhimg.com/v2-e3a0c8b9d1086a27eabf2bdb_b.jpg& data-rawwidth=&638& data-rawheight=&550& class=&origin_image zh-lightbox-thumb& width=&638& data-original=&https://pic3.zhimg.com/v2-e3a0c8b9d1086a27eabf2bdb_r.jpg&&&/figure&“呦,您女儿今年都二十五了,男朋友是做什么的呢。 ”&br&&br&听到这话的妈妈面色尴尬了一阵,随即不太情愿的说道:“哪来的男朋友,我家那孩子现在还单着呢。”&br&&br&“都这么大了还单身,您也不着急?”&br&&br&“着急啊,怎么不着急,我都催了好多次了。”&br&&br&“您女儿条件也不差啊,怎么还单身,是不是有啥问题。”&br&&br&听到这话,这位妈妈心里有点不太高兴,眉毛一撇扬声道:“我女儿能有啥问题,就是追她的人太多了,她都看不上眼,我皇上不急太监急有啥用,说不定她今年就能把男朋友给我带回家里。”&br&&br&“那好啊,明年请我喝你家的喜酒。”&br&&br&“那必须的,说好了哦。”&br&&br&这位妈妈在回家的路上,心里越想越发愁,别看她说对女儿找男朋友这件事不发愁,其实自己心里一点底都没有。&br&&br&她左思右想道:“我女儿这是咋了,都这么大了,二十五了还没谈个对象,我几个同事家里都抱孙子了,她这是咋回事,我要好好拾掇拾掇。”&br&&br&回到家,她赶紧给女儿打了个电话,一接通就开门见山对女儿说:“今年,你必须给我把男朋友领回家。”&br&&br&不听女儿解释,就劈头盖脸一通,把她女儿炸得七晕八素摸不着头脑。&br&&br&最后还特地撂了个狠话:“你不找到男朋友,就家里给你找,反正今年你这么滴也得给我找个男朋友回家。”&br&&br&这下女儿就懵逼了。&br&&br&故事还没有结束,因为它是一个正在发生的故事,叫主相信,这种情况在很多人身上都发生过。&br&&br&起因呢,是我一个朋友,有次一上来就给我抱怨。&br&&br&抱怨啥呢?&br&&br&她说她妈把她给卖了。&br&&br&“卖你,你妈那么爱你怎么会卖你。”我当成了一个玩笑话,不过听她解释后就好理解了。&br&&br&原来她这两年一直单身,家里催得紧了,三令五申今年必须找到对象。她也是倔,觉得找不找对象是自己事,没遇见合适的,毕竟强扭的瓜也不甜啊。&br&&br&她妈妈说,你不找就我给你找,她最初不以为意,结果最近真的给她联系了一个相亲对象,说是什么同学的儿子,条件好,家里人都觉得挺满意,最好这两年就把婚给结了。&br&&br&她没办法,想着搪塞一下就过去了,就加了微信,聊了聊,感觉三观怎么样都不合适。&br&&br&给家里说了,但她妈妈不同意,让她别找借口,赶紧回来见面,这下她没辙了,和家里大吵一架,几天都没再联系。&br&&br&最后她给我说:“我就是想单身啊,单身有错吗,难道单身就得承受这些么,想自己一个人这几年先好好过怎么就这么难啊”&br&&br&别说她没辙,其实我也没辙。&br&&br&我发现,这个世界好像一直对单身抱有一种敌意。&br&&br&是的,单身的人不仅要自己的心灵饱受挣扎,还得被情侣虐狗,被催婚,被段子调侃。&br&&br&所以,当单身狗成为了自黑的流行词语的时候,其实是一种对公共舆论目光压力下的释放和疏解。&br&&br&其实我们得承认一点,&b&就是这个社会对单身的人,是存在偏见的。&/b&&br&&br&以至于有些时候,单身会受人歧视。&br&&br&一个人恋爱经历多,会成为一种炫耀的资本。&br&&br&&b&一个长期保持单身状态的人,不得不忍受这些非议,即便自己不在乎,也要被家里催。&/b&&br&&br&他们会把一个长期的单身的人,理解为心理有问题,甚至引申到人品和能力。&br&&br&但我就是单身,我乐意,你管得着吗?&br&&br&尤其是在我们中国,以人情和关系为纽带,家庭和乡缘为基石的社会,单身更会引起长辈的误解和怀疑。&br&&br&“我像你这么大的时候,都有你了,你怎么连个女朋友都没找到。”&br&&br&在他们眼里,单身的人,像个永远长不大的孩子,即便你已经经历过了社会的风风雨雨。&br&&br&&b&谁说单身的人就不完整不幸福呢?&/b&&br&&br&通往幸福的途径有很多条,急急忙忙找一个不爱的人脱单,并不能给我带来幸福。&br&&br&但我们应该说出来,&b&我单身,是我自己选择的一种生活方式,我为自己而活,我依然期盼爱情,但我想给一点妥善经营自己的时间。&/b&&br&&br&我们不是单身,我们只是喜欢独处的生活&br&&br&我不是不找,我只是想给自己多一点奋斗的时间&br&&br&我们单身不一定苦逼,我们享受其中的孤独,&br&&br&我们不是真正愿意单身,我们只想等待一个真正可爱的人。&br&&br&&b&我跟幸福打了个赌,我说,要把自己交给那个最默契的灵魂,也许会多花一点时间,但为了真正相识到,那个每天早上醒来,你都愿意冲她微笑的人。&/b&&br&&br&多单一段时间,又何妨?&br&&br&&b&更多原创文章在个人公众号:众生尖叫(theycry)&/b&&br&&br&&br&&figure&&img data-rawwidth=&600& data-rawheight=&278& src=&http://pic3.zhimg.com/v2-3a3b5ead5f1c81d922d1a25e7451afd2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&http://pic3.zhimg.com/v2-3a3b5ead5f1c81d922d1a25e7451afd2_r.jpg&&&/figure&
“呦,您女儿今年都二十五了,男朋友是做什么的呢。 ” 听到这话的妈妈面色尴尬了一阵,随即不太情愿的说道:“哪来的男朋友,我家那孩子现在还单着呢。” “都这么大了还单身,您也不着急?” “着急啊,怎么不着急,我都催了好多次了。” “您女儿条件也…
&figure&&img src=&https://pic2.zhimg.com/v2-10686dab6047575dcc64ac6ac8b5378c_b.jpg& data-rawwidth=&1728& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1728& data-original=&https://pic2.zhimg.com/v2-10686dab6047575dcc64ac6ac8b5378c_r.jpg&&&/figure&&p&&b&作者:爱好装逼的 &a href=&https://link.zhihu.com/?target=http%3A//www.liangfei.me/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&梁飞&/a&&/b&&/p&&p&“强制升级”会中断用户操作,阻碍正常使用,看似是一个不光彩的行为,但是智者千虑必有一失,我们无法保证 App 的正确性,在某些紧急情况下,强制升级还是非常必要的,而且接入的时间越早越好。&/p&&p&有赞微商城 App 早期版本只提供了一个更新提示的对话框,并不会强制用户更新。随着后端网关升级,一些老的服务需要下线,但是新版本到达率并不理想,继续维护老接口带来一定成本,而且新功能也无法触及用户。&/p&&p&为了提升版本到达率,我们重新梳理了强制升级的逻辑。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-6c55c9f8dc199_b.jpg& data-rawwidth=&615& data-rawheight=&928& class=&origin_image zh-lightbox-thumb& width=&615& data-original=&https://pic2.zhimg.com/v2-6c55c9f8dc199_r.jpg&&&/figure&&p&升级过程中首先要保证 apk 的下载成功率,下载完成之后要及时弹出安装页面,为了防止下载失败,也要提供市场下载的选项,这样一定程度上也能保证升级之后渠道的一致性。&br&&/p&&ul&&li&更新对话框需要展示标题、内容和动作按钮。&/li&&/ul&&figure&&img src=&https://pic3.zhimg.com/v2-9fd3f81b9a2b_b.jpg& data-rawwidth=&553& data-rawheight=&304& class=&origin_image zh-lightbox-thumb& width=&553& data-original=&https://pic3.zhimg.com/v2-9fd3f81b9a2b_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-67c7bf303feef353d4a56d429eaac5e6_b.jpg& data-rawwidth=&552& data-rawheight=&305& class=&origin_image zh-lightbox-thumb& width=&552& data-original=&https://pic2.zhimg.com/v2-67c7bf303feef353d4a56d429eaac5e6_r.jpg&&&/figure&&p&&br&&/p&&ul&&li&状态栏下载通知需要展示应用名字和描述。&/li&&/ul&&figure&&img src=&https://pic1.zhimg.com/v2-bc0aa6e4db7fea44ef81c94_b.jpg& data-rawwidth=&575& data-rawheight=&139& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&https://pic1.zhimg.com/v2-bc0aa6e4db7fea44ef81c94_r.jpg&&&/figure&&h2&构造参数&/h2&&p&业务方需要提供的参数:&br&&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kd&&class&/span& &span class=&nc&&AppUpdater&/span& &span class=&o&&{&/span&
&span class=&kd&&public&/span& &span class=&kd&&static&/span& &span class=&kd&&class&/span& &span class=&nc&&Builder&/span& &span class=&o&&{&/span&
&span class=&kd&&private&/span& &span class=&n&&Context&/span& &span class=&n&&context&/span&&span class=&o&&;&/span&
&span class=&kd&&private&/span& &span class=&n&&String&/span& &span class=&n&&url&/span&&span class=&o&&;&/span&
&span class=&c1&&// apk 下载链接&/span&
&span class=&kd&&private&/span& &span class=&n&&String&/span& &span class=&n&&title&/span&&span class=&o&&;&/span&
&span class=&c1&&// 更新对话框 title&/span&
&span class=&kd&&private&/span& &span class=&n&&String&/span& &span class=&n&&content&/span&&span class=&o&&;&/span& &span class=&c1&&// 更新内容&/span&
&span class=&kd&&private&/span& &span class=&kt&&boolean&/span& &span class=&n&&force&/span&&span class=&o&&;&/span&
&span class=&c1&&// 是否强制更新&/span&
&span class=&kd&&private&/span& &span class=&n&&String&/span& &span class=&n&&app&/span&&span class=&o&&;&/span& &span class=&c1&&// app 名字&/span&
&span class=&kd&&private&/span& &span class=&n&&String&/span& &span class=&n&&description&/span&&span class=&o&&;&/span& &span class=&c1&&// app 描述&/span&
&span class=&o&&}&/span&
&span class=&kd&&private&/span& &span class=&nf&&AppUpdater&/span&&span class=&o&&(&/span&&span class=&kd&&final&/span& &span class=&n&&Builder&/span& &span class=&n&&builder&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&k&&this&/span&&span class=&o&&.&/span&&span class=&na&&builder&/span& &span class=&o&&=&/span& &span class=&n&&builder&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&update&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&n&&Intent&/span& &span class=&n&&intent&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&Intent&/span&&span class=&o&&(&/span&&span class=&n&&builder&/span&&span class=&o&&.&/span&&span class=&na&&context&/span&&span class=&o&&,&/span& &span class=&n&&DownloadActivity&/span&&span class=&o&&.&/span&&span class=&na&&class&/span&&span class=&o&&);&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&putExtra&/span&&span class=&o&&(&/span&&span class=&n&&DownloadActivity&/span&&span class=&o&&.&/span&&span class=&na&&EXTRA_STRING_APP_NAME&/span&&span class=&o&&,&/span&
&span class=&n&&builder&/span&&span class=&o&&.&/span&&span class=&na&&app&/span&&span class=&o&&);&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&putExtra&/span&&span class=&o&&(&/span&&span class=&n&&DownloadActivity&/span&&span class=&o&&.&/span&&span class=&na&&EXTRA_STRING_URL&/span&&span class=&o&&,&/span& &span class=&n&&builder&/span&&span class=&o&&.&/span&&span class=&na&&url&/span&&span class=&o&&);&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&putExtra&/span&&span class=&o&&(&/span&&span class=&n&&DownloadActivity&/span&&span class=&o&&.&/span&&span class=&na&&EXTRA_STRING_TITLE&/span&&span class=&o&&,&/span& &span class=&n&&builder&/span&&span class=&o&&.&/span&&span class=&na&&title&/span&&span class=&o&&);&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&putExtra&/span&&span class=&o&&(&/span&&span class=&n&&DownloadActivity&/span&&span class=&o&&.&/span&&span class=&na&&EXTRA_STRING_CONTENT&/span&&span class=&o&&,&/span& &span class=&n&&builder&/span&&span class=&o&&.&/span&&span class=&na&&content&/span&&span class=&o&&);&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&putExtra&/span&&span class=&o&&(&/span&&span class=&n&&DownloadActivity&/span&&span class=&o&&.&/span&&span class=&na&&EXTRA_STRING_DESCRIPTION&/span&&span class=&o&&,&/span&
&span class=&n&&builder&/span&&span class=&o&&.&/span&&span class=&na&&description&/span&&span class=&o&&);&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&putExtra&/span&&span class=&o&&(&/span&&span class=&n&&DownloadActivity&/span&&span class=&o&&.&/span&&span class=&na&&EXTRA_BOOLEAN_FORCE&/span&&span class=&o&&,&/span& &span class=&n&&builder&/span&&span class=&o&&.&/span&&span class=&na&&force&/span&&span class=&o&&);&/span&
&span class=&n&&builder&/span&&span class=&o&&.&/span&&span class=&na&&context&/span&&span class=&o&&.&/span&&span class=&na&&startActivity&/span&&span class=&o&&(&/span&&span class=&n&&intent&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&h2&使用 DownloadManager 下载 apk&/h2&&p&为了提高下载成功率,我们使用了系统 Service - &a href=&https://link.zhihu.com/?target=https%3A//developer.android.com/reference/android/app/DownloadManager.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DownloadManager&/a&,因为是独立进程,不会增加 App 占用的系统开销。&br&&/p&&p&如果 DownloadManager 被系统禁用,那直接跳转到浏览器去下载。&br&&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&private&/span& &span class=&kt&&void&/span& &span class=&nf&&downloadApk&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&k&&if&/span& &span class=&o&&(&/span&&span class=&n&&TextUtils&/span&&span class=&o&&.&/span&&span class=&na&&isEmpty&/span&&span class=&o&&(&/span&&span class=&n&&downloadUrl&/span&&span class=&o&&))&/span& &span class=&k&&return&/span&&span class=&o&&;&/span&
&span class=&c1&&// check dir&/span&
&span class=&n&&File&/span& &span class=&n&&path&/span& &span class=&o&&=&/span& &span class=&n&&Environment&/span&&span class=&o&&.&/span&&span class=&na&&getExternalStoragePublicDirectory&/span&&span class=&o&&(&/span&&span class=&n&&Environment&/span&&span class=&o&&.&/span&&span class=&na&&DIRECTORY_DOWNLOADS&/span&&span class=&o&&);&/span&
&span class=&k&&if&/span& &span class=&o&&(!&/span&&span class=&n&&path&/span&&span class=&o&&.&/span&&span class=&na&&exists&/span&&span class=&o&&()&/span& &span class=&o&&&&&/span& &span class=&o&&!&/span&&span class=&n&&path&/span&&span class=&o&&.&/span&&span class=&na&&mkdirs&/span&&span class=&o&&())&/span& &span class=&o&&{&/span&
&span class=&n&&Toast&/span&&span class=&o&&.&/span&&span class=&na&&makeText&/span&&span class=&o&&(&/span&&span class=&k&&this&/span&&span class=&o&&,&/span& &span class=&n&&String&/span&&span class=&o&&.&/span&&span class=&na&&format&/span&&span class=&o&&(&/span&&span class=&n&&getString&/span&&span class=&o&&(&/span&&span class=&n&&R&/span&&span class=&o&&.&/span&&span class=&na&&string&/span&&span class=&o&&.&/span&&span class=&na&&app_updater_dir_not_found&/span&&span class=&o&&),&/span&
&span class=&n&&path&/span&&span class=&o&&.&/span&&span class=&na&&getPath&/span&&span class=&o&&()),&/span& &span class=&n&&Toast&/span&&span class=&o&&.&/span&&span class=&na&&LENGTH_SHORT&/span&&span class=&o&&).&/span&&span class=&na&&show&/span&&span class=&o&&();&/span&
&span class=&k&&return&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&cm&&/** construct request */&/span&
&span class=&kd&&final&/span& &span class=&n&&DownloadManager&/span&&span class=&o&&.&/span&&span class=&na&&Request&/span& &span class=&n&&request&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&DownloadManager&/span&&span class=&o&&.&/span&&span class=&na&&Request&/span&&span class=&o&&(&/span&&span class=&n&&Uri&/span&&span class=&o&&.&/span&&span class=&na&&parse&/span&&span class=&o&&(&/span&&span class=&n&&downloadUrl&/span&&span class=&o&&));&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setAllowedNetworkTypes&/span&&span class=&o&&(&/span&&span class=&n&&DownloadManager&/span&&span class=&o&&.&/span&&span class=&na&&Request&/span&&span class=&o&&.&/span&&span class=&na&&NETWORK_MOBILE&/span&
&span class=&o&&|&/span& &span class=&n&&DownloadManager&/span&&span class=&o&&.&/span&&span class=&na&&Request&/span&&span class=&o&&.&/span&&span class=&na&&NETWORK_WIFI&/span&&span class=&o&&);&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setAllowedOverRoaming&/span&&span class=&o&&(&/span&&span class=&kc&&false&/span&&span class=&o&&);&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setDestinationInExternalPublicDir&/span&&span class=&o&&(&/span&&span class=&n&&Environment&/span&&span class=&o&&.&/span&&span class=&na&&DIRECTORY_DOWNLOADS&/span&&span class=&o&&,&/span&
&span class=&n&&appName&/span& &span class=&o&&+&/span& &span class=&s&&&.apk&&/span&&span class=&o&&);&/span&
&span class=&k&&if&/span& &span class=&o&&(!&/span&&span class=&n&&TextUtils&/span&&span class=&o&&.&/span&&span class=&na&&isEmpty&/span&&span class=&o&&(&/span&&span class=&n&&appName&/span&&span class=&o&&))&/span& &span class=&o&&{&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setTitle&/span&&span class=&o&&(&/span&&span class=&n&&appName&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&k&&if&/span& &span class=&o&&(!&/span&&span class=&n&&TextUtils&/span&&span class=&o&&.&/span&&span class=&na&&isEmpty&/span&&span class=&o&&(&/span&&span class=&n&&description&/span&&span class=&o&&))&/span& &span class=&o&&{&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setDescription&/span&&span class=&o&&(&/span&&span class=&n&&description&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span& &span class=&k&&else&/span& &span class=&o&&{&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setDescription&/span&&span class=&o&&(&/span&&span class=&n&&downloadUrl&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&cm&&/** start downloading */&/span&
&span class=&n&&downloadId&/span& &span class=&o&&=&/span& &span class=&n&&downloadManager&/span&&span class=&o&&.&/span&&span class=&na&&enqueue&/span&&span class=&o&&(&/span&&span class=&n&&request&/span&&span class=&o&&);&/span&
&span class=&n&&setStatus&/span&&span class=&o&&(&/span&&span class=&n&&STATUS_DOWNLOADING&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&h2&注册监听下载完成的 Receiver&/h2&&p&我们通过一个全局的 Receiver 来接收下载完成的广播,这样即使 App 进程被杀死,依然可以弹出安装界面。&br&&/p&&div class=&highlight&&&pre&&code class=&language-xml&&&span&&/span&&span class=&nt&&&receiver&/span&
&span class=&na&&android:name=&/span&&span class=&s&&&.DownloadReceiver&&/span&
&span class=&na&&android:enabled=&/span&&span class=&s&&&true&&/span&
&span class=&na&&android:exported=&/span&&span class=&s&&&true&&/span&&span class=&nt&&&&/span&
&span class=&nt&&&intent-filter&&/span&
&span class=&nt&&&action&/span& &span class=&na&&android:name=&/span&&span class=&s&&&android.intent.action.DOWNLOAD_COMPLETE&&/span&&span class=&nt&&/&&/span&
&span class=&nt&&&/intent-filter&&/span&
&span class=&nt&&&/receiver&&/span&
&/code&&/pre&&/div&&p&接收到广播之后,弹出安装界面。&br&&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&private&/span& &span class=&kt&&void&/span& &span class=&nf&&installApk&/span&&span class=&o&&(&/span&&span class=&kd&&final&/span& &span class=&n&&Context&/span& &span class=&n&&context&/span&&span class=&o&&,&/span& &span class=&kd&&final&/span& &span class=&n&&Uri&/span& &span class=&n&&uri&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&Intent&/span& &span class=&n&&intent&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&Intent&/span&&span class=&o&&(&/span&&span class=&n&&Intent&/span&&span class=&o&&.&/span&&span class=&na&&ACTION_VIEW&/span&&span class=&o&&);&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&addFlags&/span&&span class=&o&&(&/span&&span class=&n&&Intent&/span&&span class=&o&&.&/span&&span class=&na&&FLAG_ACTIVITY_NEW_TASK&/span&&span class=&o&&);&/span&
&span class=&n&&Uri&/span& &span class=&n&&apkUri&/span& &span class=&o&&=&/span& &span class=&n&&uri&/span&&span class=&o&&;&/span&
&span class=&k&&if&/span& &span class=&o&&(&/span&&span class=&n&&Build&/span&&span class=&o&&.&/span&&span class=&na&&VERSION&/span&&span class=&o&&.&/span&&span class=&na&&SDK_INT&/span& &span class=&o&&&=&/span& &span class=&n&&Build&/span&&span class=&o&&.&/span&&span class=&na&&VERSION_CODES&/span&&span class=&o&&.&/span&&span class=&na&&N&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&apkUri&/span& &span class=&o&&=&/span& &span class=&n&&FileProvider&/span&&span class=&o&&.&/span&&span class=&na&&getUriForFile&/span&&span class=&o&&(&/span&&span class=&n&&context&/span&&span class=&o&&,&/span& &span class=&n&&context&/span&&span class=&o&&.&/span&&span class=&na&&getPackageName&/span&&span class=&o&&()&/span& &span class=&o&&+&/span& &span class=&s&&&.provider&&/span&&span class=&o&&,&/span&
&span class=&k&&new&/span& &span class=&n&&File&/span&&span class=&o&&(&/span&&span class=&n&&uri&/span&&span class=&o&&.&/span&&span class=&na&&getPath&/span&&span class=&o&&()));&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&addFlags&/span&&span class=&o&&(&/span&&span class=&n&&Intent&/span&&span class=&o&&.&/span&&span class=&na&&FLAG_GRANT_READ_URI_PERMISSION&/span&
&span class=&o&&|&/span& &span class=&n&&Intent&/span&&span class=&o&&.&/span&&span class=&na&&FLAG_GRANT_WRITE_URI_PERMISSION&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&n&&intent&/span&&span class=&o&&.&/span&&span class=&na&&setDataAndType&/span&&span class=&o&&(&/span&&span class=&n&&apkUri&/span&&span class=&o&&,&/span& &span class=&s&&&application/vnd.android.package-archive&&/span&&span class=&o&&);&/span&
&span class=&n&&context&/span&&span class=&o&&.&/span&&span class=&na&&startActivity&/span&&span class=&o&&(&/span&&span class=&n&&intent&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&注意此处有坑,在 SDK &= 24 的系统中,Intent 不允许携带 file:// 格式的数据,只能通过 provider 的形式共享数据。&br&&/p&&p&所以我们还需要注册一个 FileProvider。&/p&&div class=&highlight&&&pre&&code class=&language-xml&&&span&&/span&&span class=&nt&&&provider&/span&
&span class=&na&&android:name=&/span&&span class=&s&&&android.support.v4.content.FileProvider&&/span&
&span class=&na&&android:authorities=&/span&&span class=&s&&&${applicationId}.provider&&/span&
&span class=&na&&android:exported=&/span&&span class=&s&&&false&&/span&
&span class=&na&&android:grantUriPermissions=&/span&&span class=&s&&&true&&/span&&span class=&nt&&&&/span&
&span class=&nt&&&meta-data&/span&
&span class=&na&&android:name=&/span&&span class=&s&&&android.support.FILE_PROVIDER_PATHS&&/span&
&span class=&na&&android:resource=&/span&&span class=&s&&&@xml/provider_paths&&/span&&span class=&nt&&/&&/span&
&span class=&nt&&&/provider&&/span&
&/code&&/pre&&/div&&p&${applicationId}$ 是 AndroidManifest.xml 中的占位符,gradle 会进行替换。&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&android:authorities=&${applicationId}.provider&
&/code&&/pre&&/div&&p&对应 Java 代码:&br&&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&n&&FileProvider&/span&&span class=&o&&.&/span&&span class=&na&&getUriForFile&/span&&span class=&o&&(&/span&&span class=&n&&context&/span&&span class=&o&&,&/span& &span class=&n&&context&/span&&span class=&o&&.&/span&&span class=&na&&getPackageName&/span&&span class=&o&&()&/span& &span class=&o&&+&/span& &span class=&s&&&.provider&&/span&&span class=&o&&,&/span& &span class=&k&&new&/span& &span class=&n&&File&/span&&span class=&o&&(&/span&&span class=&n&&uri&/span&&span class=&o&&.&/span&&span class=&na&&getPath&/span&&span class=&o&&()))&/span&
&/code&&/pre&&/div&&p&注意:Java 代码中 getPackageName() 的返回值是 ApplicationId,具体可参考 &a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/feelang/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ApplicationId 与 PackageName 的区别&/a&。&/p&&p&完整版代码:&a href=&https://link.zhihu.com/?target=https%3A//github.com/LyndonChin/ZanAppUpdater& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LyndonChin/ZanAppUpdater&/a&&br&原文链接:&a href=&https://link.zhihu.com/?target=https%3A//youzanmobile.github.io//zan-app-updater/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Android 强升逻辑和实现&/a&&/p&&p&&br&&/p&&blockquote&我们积极拥抱新技术,不给自己设边界,勇于跳出舒适区&br&iOS/Android 开发可投简历至 &a href=&mailto:&&&/a&(微信:feelang )&/blockquote&
作者:爱好装逼的 “强制升级”会中断用户操作,阻碍正常使用,看似是一个不光彩的行为,但是智者千虑必有一失,我们无法保证 App 的正确性,在某些紧急情况下,强制升级还是非常必要的,而且接入的时间越早越好。有赞微商城 App 早期版本只提供了一个…
Hannibal(電視劇)是一部美食劇,(當然還是一部高逼格的家庭裝修以及男士穿衣指南) &br&&br&這其實是我的另一篇答案不過感覺放到這裡更好。&br&&br&對我的啟發就是好好做菜呀!&br&&br&正好七月以來比較有空,準備把Hannibal的菜都做一遍,雖然有些食材極難獲得。但是抱著一個認真的態度,我盡量吧。&br&&br&S1-01Hannibal出場就在高端的餐桌前享用美食。&figure&&img data-rawheight=&484& src=&https://pic1.zhimg.com/5060c1fccba_b.jpg& data-rawwidth=&995& class=&origin_image zh-lightbox-thumb& width=&995& data-original=&https://pic1.zhimg.com/5060c1fccba_r.jpg&&&/figure&&br&&figure&&img data-rawheight=&424& src=&https://pic3.zhimg.com/968aec7c8a_b.jpg& data-rawwidth=&1027& class=&origin_image zh-lightbox-thumb& width=&1027& data-original=&https://pic3.zhimg.com/968aec7c8a_r.jpg&&&/figure&根據上下文理解應該是肝臟,但是我反復看了無數遍圖片,肝臟應該很難做出這種感覺,所以我用了牛肉烤製,生洋蔥末味道太重,我稍微炒製了一下,順便配了蘆筍。&figure&&img data-rawheight=&2848& src=&https://pic1.zhimg.com/acf5b9a9dd3e5d5005d98_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic1.zhimg.com/acf5b9a9dd3e5d5005d98_r.jpg&&&/figure&果盤簡單,石榴超市有賣,雖然草莓已經過季了,幸好自家院子里種了點,無花果樹正好我也有一棵,可惜的是今年的無花果已經都被我曬乾了。&figure&&img data-rawheight=&2848& src=&https://pic4.zhimg.com/ea933ed4ff_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic4.zhimg.com/ea933ed4ff_r.jpg&&&/figure&&br&&br&S1-01.2&br&Hannibal給Will帶去了碎雞蛋加香腸(some eggs some sauage)&br&&figure&&img data-rawheight=&530& src=&https://pic1.zhimg.com/f7dcaab70b0c4f7ec91d04_b.jpg& data-rawwidth=&836& class=&origin_image zh-lightbox-thumb& width=&836& data-original=&https://pic1.zhimg.com/f7dcaab70b0c4f7ec91d04_r.jpg&&&/figure&&br&這應該是全劇最簡單的一道菜,碎蛋配生番茄和蔬菜,香腸我目測有兩種,黑色的應該是血腸,紅色的應該是雞肉腸。(當然Hannibal的肯定是高端食材)&figure&&img data-rawheight=&4288& src=&https://pic2.zhimg.com/eef7dad3c2c1c8b7fbe465_b.jpg& data-rawwidth=&2848& class=&origin_image zh-lightbox-thumb& width=&2848& data-original=&https://pic2.zhimg.com/eef7dad3c2c1c8b7fbe465_r.jpg&&&/figure&&br&S1-02&br&Hannibal 招待 Jack的 Pork loin,配Cumberland醬。&figure&&img data-rawheight=&577& src=&https://pic4.zhimg.com/41c39acdacacb_b.jpg& data-rawwidth=&1024& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&https://pic4.zhimg.com/41c39acdacacb_r.jpg&&&/figure&&br&這道菜的難點在於Cumberland醬,這種醬料是一種水果酸甜醬,成品在馬德里沒找到有賣,所以我看了幾個視頻之後開始自己做。主料是紅醋栗和紅酒,加檸檬和橙汁,乾薑粉和黃芥末,先把紅醋栗打碎,濾掉渣滓,和上述材料混合在一起像熬製果醬一樣熬成,如果味太酸可以加糖。Hannibal的配菜有兩種蘑菇和豆角,豆角我也沒找到有賣,所以我用上次餘下的蘆筍代替了。味道還不錯。關鍵是後來發現Cumberland醬真是非常實用的一種醬料,尤其搭配蔬菜沙拉,簡直一絕。(下圖第一張是熬製Cumberland醬的主料)&figure&&img data-rawheight=&2848& src=&https://pic4.zhimg.com/79f1df4e5fdb4b57636db93_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic4.zhimg.com/79f1df4e5fdb4b57636db93_r.jpg&&&/figure&&figure&&img data-rawheight=&2848& src=&https://pic3.zhimg.com/b77bab86ced977a28256_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic3.zhimg.com/b77bab86ced977a28256_r.jpg&&&/figure&(忽略我醜陋的醬碗,因為很少用,只有這個湊合了。)&br&&br&S1-04&br&第三集沒有吃的,第四集Hannibal給Abigail做了香腸配煎蛋。&figure&&img data-rawheight=&496& src=&https://pic2.zhimg.com/75dd3aded690de8c1f0b1c5_b.jpg& data-rawwidth=&1005& class=&origin_image zh-lightbox-thumb& width=&1005& data-original=&https://pic2.zhimg.com/75dd3aded690de8c1f0b1c5_r.jpg&&&/figure&目測Hannibal又用了血腸,我為了搭配選擇了兩種腸子。早餐當然要搭配牛奶和水果,當然還有我自己熬得杏子醬。&br&&figure&&img data-rawheight=&2848& src=&https://pic4.zhimg.com/e24edc2f881f13c64e0bd3d900cdf2c3_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic4.zhimg.com/e24edc2f881f13c64e0bd3d900cdf2c3_r.jpg&&&/figure&&br&本集中還有一道菜是他給Jack做的兔肉,雖然兔子好買,但是至今為止我依然沒有想明白如何把兔肉做成他那個樣子,因為我沒有做就沒有截圖。難度實在是有點大,當然如果有大神願意指導我真是求之不得!&br&&br&S1-05 &br&Hannibal用鵝肝醬招待了Jack夫婦,配Late harvest Vidal sauce&br&&figure&&img data-rawheight=&566& src=&https://pic1.zhimg.com/c1d4fd7f0c498f53a58e04deb2d47b4c_b.jpg& data-rawwidth=&1015& class=&origin_image zh-lightbox-thumb& width=&1015& data-original=&https://pic1.zhimg.com/c1d4fd7f0c498f53a58e04deb2d47b4c_r.jpg&&&/figure&其實我搞不懂他的Late Harvest Vidal sauce是什麼東西,我只知道Late Harvest Vidal是一種白葡萄甜酒,酒精度在11度左右,所以這個sauce應該是一種甜醬,我吃過一道鵝肝醬配棗泥,簡直美味到不行。配菜是紫甘藍無花果及黑莓,白色的那個我不知道是什麼,看起來像杏鮑菇切片。正好家裡有鵝肝,但沒有Hannibal那麼高端的鵝肝醬,我就湊合做了一下。順便開了一瓶晚收的白葡萄甜酒。 &figure&&img data-rawheight=&2848& src=&https://pic2.zhimg.com/8acae34fac03f4e42b2495_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic2.zhimg.com/8acae34fac03f4e42b2495_r.jpg&&&/figure&&br&S1-06&br&Lamb Tongue en papillote ,sauce of duxelles &br&&figure&&img data-rawheight=&560& src=&https://pic2.zhimg.com/3d27746eedd69fb077c9_b.jpg& data-rawwidth=&1006& class=&origin_image zh-lightbox-thumb& width=&1006& data-original=&https://pic2.zhimg.com/3d27746eedd69fb077c9_r.jpg&&&/figure&其實這道菜我還是有些疑問的:1.平菇目測是全生的。我感覺我自己好像吃不大習慣。2.papillote顏色在圖片中有些太白了,而且紙質感覺太細,像是打印紙一樣。3.羊舌應該是醃製過的,但是醃製過程不得而知,所以我用了白葡萄酒,及烹飪羊肉常用的幾種材料醃製了羊舌。4.sauce of duxelles我怎麼做都做不出來圖中那種顏色,我猜想是因為要使用明火燒一下鍋,可惜我的廚房是電磁爐。&br&其實之前從來沒有烹飪過舌頭,所一這次烤製火候有點沒掌握好,太過了,但是吃過之後發現搭配duexells 真的是非常美味,可以加入我的未來食譜啦!&br&&figure&&img data-rawheight=&2848& src=&https://pic3.zhimg.com/dde1e102_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic3.zhimg.com/dde1e102_r.jpg&&&/figure&&br&Hannibal 天天飲食,我會堅持做下去,當然有些難度太大或者食材實在不容易獲得的話敬請見諒。會抽空來更新的,謝謝大家。&br&&br&27-07 更新~&br&&br&S1-07 這集裡邊菜比較多~介紹比較詳細的就是玫瑰番茄人心~&figure&&img data-rawheight=&468& src=&https://pic1.zhimg.com/b8eabc9c9a82c_b.jpg& data-rawwidth=&929& class=&origin_image zh-lightbox-thumb& width=&929& data-original=&https://pic1.zhimg.com/b8eabc9c9a82c_r.jpg&&&/figure&&br&&br&不知道心臟裡邊塞了什麼~看起來像一種固體醬料,應該是用蔬菜炒制的。我怕內臟的味道太重用了蔥薑蒜切末塞進去&figure&&img data-rawheight=&2848& src=&https://pic3.zhimg.com/4d975b5cb_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic3.zhimg.com/4d975b5cb_r.jpg&&&/figure&&br&&br&烤盤中放了胡蘿蔔,洋蔥跟整蒜。&figure&&img data-rawheight=&495& src=&https://pic4.zhimg.com/aaf5bd0bc8d_b.jpg& data-rawwidth=&989& class=&origin_image zh-lightbox-thumb& width=&989& data-original=&https://pic4.zhimg.com/aaf5bd0bc8d_r.jpg&&&/figure&&br&&br&但是我極度討厭吃胡蘿蔔,立下規矩胡蘿蔔不準進家門。所以多用了點洋蔥。&figure&&img data-rawheight=&2848& src=&https://pic1.zhimg.com/b86a6ba7a99e2c5daa93c8_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic1.zhimg.com/b86a6ba7a99e2c5daa93c8_r.jpg&&&/figure&&br&&br&烤成之後的擺盤~目測Hannibal用了烤製的撻皮配番茄醬~&figure&&img data-rawheight=&476& src=&https://pic3.zhimg.com/1f3bd53a3bdd1ca1c2646_b.jpg& data-rawwidth=&914& class=&origin_image zh-lightbox-thumb& width=&914& data-original=&https://pic3.zhimg.com/1f3bd53a3bdd1ca1c2646_r.jpg&&&/figure&&br&&br&因為沒有做其他菜,肺臟肝臟我也不愛吃?我就豐富了一下撻皮用了黑莓,番茄和香腸烤了。番茄皮玫瑰看起來高端其實做起來很簡單~&figure&&img data-rawheight=&2848& src=&https://pic4.zhimg.com/71b02bdfebb1f_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic4.zhimg.com/71b02bdfebb1f_r.jpg&&&/figure&&br&&br&28-07更新&br&&br&第八至十集的食物分別是給will的甜點~給lounds的沙拉~和給醫生的Jamón ibérico.&br&甜點很簡單~等我有空烤一個就好,沙拉更簡單~我估計今晚會做。&br&&br&Jamón ibérico 需要介紹一下,這東西自從我來了馬德里就深深的愛上了,這是我覺得西班牙除了紅酒之外第二好的東西。幾乎每兩天就要吃一點,但是Jamón跟紅酒有點像,從貴到便宜都有,好的一條腿兩千歐元,便宜的三四十也有。而且jamón有個關鍵是要會切,切jamón是西班牙的傳統工作技藝,專門切jamón師傅月薪絕對不低,我自己在家切是切不出那種你味道的。超市裡賣的切好的片大多是機器切的,根本沒法吃。所以貼一張找師傅切的jamón給大家。&figure&&img data-rawheight=&1000& src=&https://pic1.zhimg.com/b889fd9865cebf1bb3583fba588e9518_b.jpg& data-rawwidth=&1334& class=&origin_image zh-lightbox-thumb& width=&1334& data-original=&https://pic1.zhimg.com/b889fd9865cebf1bb3583fba588e9518_r.jpg&&&/figure&&br&&br&盤子裡的jamón有兩種,好兄弟推薦的,5J和joselito,兩個品牌排名都比較靠前。joselito是我的最愛。&br&&br&S1-11&br&Hannibal做了Kudal curry 配米飯,目測還有烤的餅乾之類。&figure&&img data-rawheight=&473& src=&https://pic4.zhimg.com/92eb356ac2ad59eeab987b_b.jpg& data-rawwidth=&960& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&https://pic4.zhimg.com/92eb356ac2ad59eeab987b_r.jpg&&&/figure&&br&但是劇中有個錯誤,真正的Kudal咖哩主料不是羊肉,是用羊肚為主料,當然為了配合劇中的台詞我也加了點羊肉。先要用咖哩粉熬製羊肚~配洋蔥,番茄,香菜,香葉,桂皮,椰奶,椰粉等做成。&figure&&img data-rawheight=&2848& src=&https://pic3.zhimg.com/7ba50c5bdd114a1341cf8a_b.jpg& data-rawwidth=&4288& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic3.zhimg.com/7ba50c5bdd114a1341cf8a_r.jpg&&&/figure&&br&之前我一直以為椰奶配咖哩是泰國菜的吃法,沒想到印度南方的這種咖哩也會用到。Kudal咖哩成品味道綿軟醇厚,真是非常棒!希望大家有空可以做。&br&&br&29-07 更新&br&&br&S1-09裡Hannibal做了兩道菜~不過出現在鏡頭裡的是給Lounds做的蔬菜沙拉~還強調她竟然是Vegetarian,很遺憾沒能喂她吃人肉。&figure&&img data-rawwidth=&827& data-rawheight=&500& src=&https://pic2.zhimg.com/2bfec87e77f7af3ee67285_b.jpg& class=&origin_image zh-lightbox-thumb& width=&827& data-original=&https://pic2.zhimg.com/2bfec87e77f7af3ee67285_r.jpg&&&/figure&&br&&br&黃色的我猜是煎過的土豆,紅色的是紅菜頭,我本來自己種了但是這貨真的一點都不好吃。我就用洋蔥代替了。白色蘆筍我能買到的都是罐頭裝的,我還是用了新鮮的,順便摘了兩顆草莓~&figure&&img data-rawwidth=&3318& data-rawheight=&2368& src=&https://pic1.zhimg.com/39bdd76ed43e248fb65f94e1f9924fbc_b.jpg& class=&origin_image zh-lightbox-thumb& width=&3318& data-original=&https://pic1.zhimg.com/39bdd76ed43e248fb65f94e1f9924fbc_r.jpg&&&/figure&&br&&br&30-07更新 &br&&br&第一季還有12和13集沒做,因為原材料限制實在是力不從心。&br&&br&十二集是烏骨雞湯,這個東西正兒八經中餐,我在馬德里從來沒見過有賣。過兩天正好要回國,回去做好了,之後會補上。&br&&br&十三集是一道傳統法國菜Tête de veau 配sauce verte 小牛頭肉實體店我也是沒見過有賣,偶爾我也會上網買些高端的牛肉吃但是找了半天也沒找到有這貨。反覆研究了一下,鏡頭中的小牛頭肉應該是壓札的。Sauce verte是用青椒和芹菜做的,我覺得這東西並不會好吃?&br&&br&第二季開始啦!&br&S201&br&&br&Hannibal給Jack做了刺身~還有海膽。&figure&&img data-rawwidth=&996& data-rawheight=&500& src=&https://pic3.zhimg.com/bbe7ff60ea_b.jpg& class=&origin_image zh-lightbox-thumb& width=&996& data-original=&https://pic3.zhimg.com/bbe7ff60ea_r.jpg&&&/figure&&br&&br&原片中說是比目魚,魷魚和蚌肉?昨天我去買了一條比目魚,還有一條大魷魚。蚌和海膽偶爾會見到,但是昨天運氣不好,又懶得跑太遠去海鮮店,就湊合兩種吧。&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic2.zhimg.com/d3aaa09bcbc5a9_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic2.zhimg.com/d3aaa09bcbc5a9_r.jpg&&&/figure&&br&&br&一般我都是放在冰上直接吃?Hannibal竟然會再加一層盤子?應該盤子提前凍過?不然肯定沒有用。&br&&br&心形冰塊是必須的?&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic1.zhimg.com/a28bff44d332f65bcef2580_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic1.zhimg.com/a28bff44d332f65bcef2580_r.jpg&&&/figure&&br&刺身最考驗刀工了?特別是魷魚,先要片薄,又要劃開還不能切透。目前是這個系列裡我做的最失敗的一道菜了?唉?加油練刀工吧。&br&&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic3.zhimg.com/8bc42bfe252_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic3.zhimg.com/8bc42bfe252_r.jpg&&&/figure&&br&&br&魷魚最好在水中泡一下,口感非常好,特別Q。&br&&br&31-07更新&br&&br&S2-02本集中Hannibal做了一道看似複雜其實很簡單的菜,紅燴牛膝。&br&&figure&&img data-rawwidth=&731& data-rawheight=&477& src=&https://pic4.zhimg.com/504cadf55e1ca86e373f1f75c27b4f93_b.jpg& class=&origin_image zh-lightbox-thumb& width=&731& data-original=&https://pic4.zhimg.com/504cadf55e1ca86e373f1f75c27b4f93_r.jpg&&&/figure&&br&&br&先用繩子把肉捆一下,然後沾麵粉和胡椒粉煎至變色。&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic3.zhimg.com/13dbeaad27e2ee5bd220bee_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic3.zhimg.com/13dbeaad27e2ee5bd220bee_r.jpg&&&/figure&&br&切洋蔥大蔥和胡蘿蔔?當然胡蘿蔔不准進家門所以我是不會用的。。用熱油加白葡萄酒炒製之後,放進烤箱烤熟就可以了,非常簡單,就是繩子綑的不太好導致變形比較嚴重?&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic2.zhimg.com/6e4bc1ee01bcd_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic2.zhimg.com/6e4bc1ee01bcd_r.jpg&&&/figure&&br&&br&01-08更新&br&&br&我竭力避免回答中無關的文字,長話短說:&br&1.真的十分感謝所有人的贊同,來知乎回答問題當然是贊越多越好,很開心!&br&2.真的不是大神,只是一個最近很有時間的吃貨,而做飯又是我的最大愛好之一。&br&3.上了日報我真的心情複雜啊?被認同非常開心,但是也有點遺憾。。因為後邊有很多菜還沒做呢??等我多做點再上多好??&br&&br&回歸正題~&br&S2-03和S2-04竟然沒有菜?難道是為了給我減輕負擔?&br&&br&S2-05 有兩道菜?Hannibal跟Jack吃的brunch,和女醫生的腰子泥?腰子泥難度不大但是我最近吃太多內臟了想緩一緩,就不做了?&br&&br&&figure&&img data-rawwidth=&1018& data-rawheight=&572& src=&https://pic3.zhimg.com/6ddbb25aeb207a5c0ae8d2d4fb25ca22_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1018& data-original=&https://pic3.zhimg.com/6ddbb25aeb207a5c0ae8d2d4fb25ca22_r.jpg&&&/figure&&br&&br&劇裡對比了Hannibal和Will的飲食,真是高下立判?&br&&br&我炒的雞蛋已經被吐槽過不少次了?說我沒放牛奶炒不出碎蛋?我也一直覺得越簡單的菜越考驗真本事?我還得接著練。但我真的不愛吃加了牛奶的雞蛋?我都是用黃油炒的,我覺得挺好吃的。。。&br&&br&&br&馬德里賣的小龍蝦都超級小,我就換成了挪威海螯蝦?這個名字還是我上網查的,平常只知道叫Cigala。沒買到牡蠣?那塊肉看起來應該是沾了麵包屑炸的雞翅膀~&br&&figure&&img data-rawwidth=&2848& data-rawheight=&4288& src=&https://pic3.zhimg.com/df983b543f97d2cb831ac8bde0c937e2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&2848& data-original=&https://pic3.zhimg.com/df983b543f97d2cb831ac8bde0c937e2_r.jpg&&&/figure&&br&&br&?前邊說三四集減輕了負擔是一個笑話,大家去看一下第六集就知道了???我得去思考一會兒???&br&&br&02-08更新&br&&br&S2-06&br&&br&前邊說過了?看過這集的人都知道??這集中的菜品對我真的是一個很大的挑戰,Hannibal又辦了晚宴。食材高端不說,做法也十分精細。&br&&br&因為之前烹飪過心臟了,第一道heart tartar我就不做了?&br&&br&第二道 beef roulade ?非常精緻。用了海苔包裹牛肉捲的兩頭。再用蔬菜(我猜想是蒜苗)札三個結,最後放在炭火上慢烤。&figure&&img data-rawwidth=&833& data-rawheight=&447& src=&https://pic4.zhimg.com/ea6db0e2f3ba69f28373f_b.jpg& class=&origin_image zh-lightbox-thumb& width=&833& data-original=&https://pic4.zhimg.com/ea6db0e2f3ba69f28373f_r.jpg&&&/figure&&figure&&img data-rawwidth=&885& data-rawheight=&533& src=&https://pic4.zhimg.com/c6dc4a58b54f2eeb82b99b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&885& data-original=&https://pic4.zhimg.com/c6dc4a58b54f2eeb82b99b_r.jpg&&&/figure&&br&真的很用心的一道菜,而且這個肉質看上去也不像普通的牛肉?果然?第三道菜告訴我們有可能是和牛?抹上油之後煎烤。&br&&figure&&img data-rawwidth=&985& data-rawheight=&560& src=&https://pic1.zhimg.com/43f23daefac1b31bdfc5c_b.jpg& class=&origin_image zh-lightbox-thumb& width=&985& data-original=&https://pic1.zhimg.com/43f23daefac1b31bdfc5c_r.jpg&&&/figure&&br&&br&劇中後邊法醫二人組有提到,這東西就是普通的wagyu不是貴如黃金的Kobe,我還是鬆了一口氣的。這個世界上普通人想吃kobe只能在日本吃到,wagyu雖然也非常難買但是有不少國家也有引進繁殖。&br&&br&第四道菜是火腿玫瑰卷,放在西瓜上,下邊襯一片綠葉,我猜有可能是薄荷。&figure&&img data-rawwidth=&856& data-rawheight=&560& src=&https://pic4.zhimg.com/f672bcc441c67_b.jpg& class=&origin_image zh-lightbox-thumb& width=&856& data-original=&https://pic4.zhimg.com/f672bcc441c67_r.jpg&&&/figure&&br&大家知道這次的難度有多大了吧?&br&&br&該我了?&br&&br&火腿不成問題,畢竟我這裡是原產地?劇中用機器切的火腿片在超市就可以買到。但是之前說過頂級的伊比利亞火腿一定要師傅來切。&br&&br&和牛?有時候運氣好才能買到,但是這次不同於海膽和牡蠣,我運氣不錯,買到了一個月前宰殺的和牛,雖然已經不算太新鮮。但是真的已經是很大的運氣了。&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic1.zhimg.com/007e8fdd933fd575e7b00_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic1.zhimg.com/007e8fdd933fd575e7b00_r.jpg&&&/figure&&br&為了證明我沒有偷工減料??&br&&br&劇中的片切的很薄,我猜想是因為冷餐會大家都要站著吃小塊的緣故,我把一盒切薄做了牛肉捲,另一盒直接烤制。份量較足,吃個過癮。火腿玫瑰卷看起來很高端,做起來並不難。&br&&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic3.zhimg.com/f11f9deb671b456_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic3.zhimg.com/f11f9deb671b456_r.jpg&&&/figure&&br&&br&正好前兩天有朋友來家裡吃過燒烤剩下點碳。生火,支烤架,鋪上扎了洞的錫紙,文火慢烤牛肉捲。&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic1.zhimg.com/bf799b4e7bef24b0b53a54_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic1.zhimg.com/bf799b4e7bef24b0b53a54_r.jpg&&&/figure&&br&&br&終於知道為什麼要綁蒜苗了??我的有一根中間斷掉了?烤製的時候肉有點變形。&br&&br&和牛的烹飪我建議除了必要的一點鹽?什麼都不要加,肉本身的味道已經極致美味,不需要其它的辛香料輔助。而且千萬不能全熟?一定要半熟?bloody更好。&br&&br&&figure&&img data-rawwidth=&2848& data-rawheight=&3873& src=&https://pic4.zhimg.com/76e523ea432d143d283c0afa7cb64137_b.jpg& class=&origin_image zh-lightbox-thumb& width=&2848& data-original=&https://pic4.zhimg.com/76e523ea432d143d283c0afa7cb64137_r.jpg&&&/figure&&br&&br&?工序繁雜,做完有點累,但是說真的,這是最近我做的最有成就感的一餐。&br&&br&本集後邊還有一道詳細的R?ti de cuisse烤腿?我是真的感覺自己回天乏力??荷葉是獲得難度最大的食材?我根本無從尋找。等到回國我研究一下吧。&br&&br&03-09更新&br&&br&回國一個月都很忙,今天終於抽空把烏雞做了?&br&S1-12&br&Hannibal給病床上的Will送去了烏雞湯~純正的中餐,Hannibal說燉湯的時候用了紅棗,人參,薑片,枸杞,還有八角。但是我覺得雞湯裡邊放八角好像味道太重了,就沒有用。&figure&&img data-rawwidth=&903& data-rawheight=&503& src=&https://pic4.zhimg.com/b3e6ccd7bbb7a0b6bde5b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&903& data-original=&https://pic4.zhimg.com/b3e6ccd7bbb7a0b6bde5b_r.jpg&&&/figure&&br&&br&&figure&&img data-rawwidth=&4286& data-rawheight=&2846& src=&https://pic1.zhimg.com/aec57ce071e2cdea1fab4e_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4286& data-original=&https://pic1.zhimg.com/aec57ce071e2cdea1fab4e_r.jpg&&&/figure&&br&20-09更新&br&&br&回到馬德里,終於有空再開始做點菜了。第一次在家招待朋友,做了Hannibal兩道菜。&br&&br&S2-06的最後,Hannibal做了Gideon醫生的大腿。做法類似叫花雞。&br&&br&目測是用羊肉做的,馬德里沒找到大羊,只找到小羊,正好我的荷葉不夠大,湊合做了一下。&br&&br&剃掉大腿骨。&br&&figure&&img data-rawwidth=&912& data-rawheight=&417& src=&https://pic4.zhimg.com/2f08561d43cefe503fb77cc8d675c34b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&912& data-original=&https://pic4.zhimg.com/2f08561d43cefe503fb77cc8d675c34b_r.jpg&&&/figure&&br&&br&&figure&&img data-rawwidth=&4129& data-rawheight=&2742& src=&https://pic4.zhimg.com/97200edf0b03f2d92c9a34d1d33c57c3_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4129& data-original=&https://pic4.zhimg.com/97200edf0b03f2d92c9a34d1d33c57c3_r.jpg&&&/figure&&br&&br&攤開鋪上乾果和香菇。&figure&&img data-rawwidth=&964& data-rawheight=&441& src=&https://pic1.zhimg.com/fef00cc6a7d6dff49c90_b.jpg& class=&origin_image zh-lightbox-thumb& width=&964& data-original=&https://pic1.zhimg.com/fef00cc6a7d6dff49c90_r.jpg&&&/figure&&br&&br&我用了小香菇,沒找到栗子我就不舉了?用了腰果和葡萄乾?&br&&figure&&img data-rawwidth=&4288& data-rawheight=&2404& src=&https://pic3.zhimg.com/f473af5a44f2ce0f1dc6_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic3.zhimg.com/f473af5a44f2ce0f1dc6_r.jpg&&&/figure&&br&&br&蓋上Jamón&br&&figure&&img data-rawwidth=&949& data-rawheight=&483& src=&https://pic1.zhimg.com/cffc_b.jpg& class=&origin_image zh-lightbox-thumb& width=&949& data-original=&https://pic1.zhimg.com/cffc_r.jpg&&&/figure&&br&&br&我做的比較小~&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic2.zhimg.com/afd1e441f88d8da30cb9b99_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic2.zhimg.com/afd1e441f88d8da30cb9b99_r.jpg&&&/figure&&br&&br&裹上黏土~捏了花和葉子~&br&&figure&&img data-rawwidth=&879& data-rawheight=&490& src=&https://pic3.zhimg.com/1a307fc98e480b72bf2fa_b.jpg& class=&origin_image zh-lightbox-thumb& width=&879& data-original=&https://pic3.zhimg.com/1a307fc98e480b72bf2fa_r.jpg&&&/figure&&br&&br&我用了模子弄了個小松鼠和小蝸牛。&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic4.zhimg.com/74b8edf2b68fe2ed9da2ab_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic4.zhimg.com/74b8edf2b68fe2ed9da2ab_r.jpg&&&/figure&&br&&br&&figure&&img data-rawwidth=&3788& data-rawheight=&2601& src=&https://pic1.zhimg.com/77adeaf1db2ff2a36e93c_b.jpg& class=&origin_image zh-lightbox-thumb& width=&3788& data-original=&https://pic1.zhimg.com/77adeaf1db2ff2a36e93c_r.jpg&&&/figure&&br&&br&我為了更大的火力沒有用烤箱,在院子裡的烤爐裡烤的。&figure&&img data-rawwidth=&2961& data-rawheight=&2064& src=&https://pic2.zhimg.com/55a96ceab85dc712bb6e5_b.jpg& class=&origin_image zh-lightbox-thumb& width=&2961& data-original=&https://pic2.zhimg.com/55a96ceab85dc712bb6e5_r.jpg&&&/figure&&br&&br&事實證明我的選擇是錯誤的??烤失敗了?有點焦?不過因為我醃製時間比較長味道真是很好?&figure&&img data-rawwidth=&4167& data-rawheight=&2765& src=&https://pic2.zhimg.com/6cde931efec6caefd02509_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4167& data-original=&https://pic2.zhimg.com/6cde931efec6caefd02509_r.jpg&&&/figure&&br&&br&S2-08裡大家終於發現Hannibal家裡提供的不是什麼好肉?Will就自己釣了鱒魚。&br&&br&&figure&&img data-rawwidth=&994& data-rawheight=&455& src=&https://pic4.zhimg.com/e4a0bc25f_b.jpg& class=&origin_image zh-lightbox-thumb& width=&994& data-original=&https://pic4.zhimg.com/e4a0bc25f_r.jpg&&&/figure&&br&&br&章魚應該是煮的。但劇裡又一次出現了我不懂的地方,明明Hannibal自己說配的是Hollandaise Sauce,但是始終沒見到,而且分魚的時候加了清湯?感覺很詭異?我還是配了傳統的Hollandaise Sauce&figure&&img data-rawwidth=&4016& data-rawheight=&2689& src=&https://pic1.zhimg.com/569f58e4b6ed4ae7af6ef592c2c6de54_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4016& data-original=&https://pic1.zhimg.com/569f58e4b6ed4ae7af6ef592c2c6de54_r.jpg&&&/figure&&br&&br&02-10更新&br&S2-09,Hannibal做了我們西班牙石榴城的一道傳統菜式,Sacromonte Tortilla。難度很小,但是不知道為什麼劇中的 tortilla顏色不對,真正的tortilla應該是我做的這個顏色才對??他的配菜倒是很豐富,但是又要忍不住吐槽鵪鶉蛋這種東西煮熟了不能把殼剝掉嗎?&figure&&img data-rawwidth=&903& data-rawheight=&498& src=&https://pic1.zhimg.com/fa3d2bcdb319aa838c421adea940cd60_b.jpg& class=&origin_image zh-lightbox-thumb& width=&903& data-original=&https://pic1.zhimg.com/fa3d2bcdb319aa838c421adea940cd60_r.jpg&&&/figure&&br&&br&目測右邊的是青醬?這東西真不好吃我沒做?蛋殼裡不知道是什麼東西?配菜看起來也不好吃的樣子?我自己配了點蔬菜和水果?&figure&&img data-rawwidth=&4288& data-rawheight=&2848& src=&https://pic1.zhimg.com/ca5af32fe94b5c786e1a0_b.jpg& class=&origin_image zh-lightbox-thumb& width=&4288& data-original=&https://pic1.zhimg.com/ca5af32fe94b5c786e1a0_r.jpg&&&/figure&
Hannibal(電視劇)是一部美食劇,(當然還是一部高逼格的家庭裝修以及男士穿衣指南) 這其實是我的另一篇答案不過感覺放到這裡更好。 對我的啟發就是好好做菜呀! 正好七月以來比較有空,準備把Hannibal的菜都做一遍,雖然有些食材極難獲得。但是抱著一個…
&figure&&img src=&https://pic3.zhimg.com/v2-f110ea9f4c07a_b.jpg& data-rawwidth=&1600& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic3.zhimg.com/v2-f110ea9f4c07a_r.jpg&&&/figure&&p&在Android开发过程中,我们有时候需要获取当前的Activity实例,比如弹出Dialog操作,必须要用到这个。关于如何实现由很多种思路,这其中有的简单,有的复杂,这里简单总结一下个人的一些经验吧。&/p&&h2&反射&/h2&&p&反射是我们经常会想到的方法,思路大概为&/p&&p&1 获取ActivityThread中所有的ActivityRecord &br&2 从ActivityRecord中获取状态不是pause的Activity并返回&/p&&p&一个使用反射来实现的代码大致如下&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kd&&static&/span& &span class=&n&&Activity&/span& &span class=&nf&&getActivity&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&n&&Class&/span& &span class=&n&&activityThreadClass&/span& &span class=&o&&=&/span& &span class=&kc&&null&/span&&span class=&o&&;&/span&
&span class=&k&&try&/span& &span class=&o&&{&/span&
&span class=&n&&activityThreadClass&/span& &span class=&o&&=&/span& &span class=&n&&Class&/span&&span class=&o&&.&/span&&span class=&na&&forName&/span&&span class=&o&&(&/span&&span class=&s&&&android.app.ActivityThread&&/span&&span class=&o&&);&/span&
&span class=&n&&Object&/span& &span class=&n&&activityThread&/span& &span class=&o&&=&/span& &span class=&n&&activityThreadClass&/span&&span class=&o&&.&/span&&span class=&na&&getMethod&/span&&span class=&o&&(&/span&&span class=&s&&&currentActivityThread&&/span&&span class=&o&&).&/span&&span class=&na&&invoke&/span&&span class=&o&&(&/span&&span class=&kc&&null&/span&&span class=&o&&);&/span&
&span class=&n&&Field&/span& &span class=&n&&activitiesField&/span& &span class=&o&&=&/span& &span class=&n&&activityThreadClass&/span&&span class=&o&&.&/span&&span class=&na&&getDeclaredField&/span&&span class=&o&&(&/span&&span class=&s&&&mActivities&&/span&&span class=&o&&);&/span&
&span class=&n&&activitiesField&/span&&span class=&o&&.&/span&&span class=&na&&setAccessible&/span&&span class=&o&&(&/span&&span class=&kc&&true&/span&&span class=&o&&);&/span&
&span class=&n&&Map&/span& &span class=&n&&activities&/span& &span class=&o&&=&/span& &span class=&o&&(&/span&&span class=&n&&Map&/span&&span class=&o&&)&/span& &span class=&n&&activitiesField&/span&&span class=&o&&.&/span&&span class=&na&&get&/span&&span class=&o&&(&/span&&span class=&n&&activityThread&/span&&span class=&o&&);&/span&
&span class=&k&&for&/span& &span class=&o&&(&/span&&span class=&n&&Object&/span& &span class=&n&&activityRecord&/span& &span class=&o&&:&/span& &span class=&n&&activities&/span&&span class=&o&&.&/span&&span class=&na&&values&/span&&span class=&o&&())&/span& &span class=&o&&{&/span&
&span class=&n&&Class&/span& &span class=&n&&activityRecordClass&/span& &span class=&o&&=&/span& &span class=&n&&activityRecord&/span&&span class=&o&&.&/span&&span class=&na&&getClass&/span&&span class=&o&&();&/span&
&span class=&n&&Field&/span& &span class=&n&&pausedField&/span& &span class=&o&&=&/span& &span class=&n&&activityRecordClass&/span&&span class=&o&&.&/span&&span class=&na&&getDeclaredField&/span&&span class=&o&&(&/span&&span class=&s&&&paused&&/span&&span class=&o&&);&/span&
&span class=&n&&pausedField&/span&&span class=&o&&.&/span&&span class=&na&&setAccessible&/span&&span class=&o&&(&/span&&span class=&kc&&true&/span&&span class=&o&&);&/span&
&span class=&k&&if&/span& &span class=&o&&(!&/span&&span class=&n&&pausedField&/span&&span class=&o&&.&/span&&span class=&na&&getBoolean&/span&&span class=&o&&(&/span&&span class=&n&&activityRecord&/span&&span class=&o&&))&/span& &span class=&o&&{&/span&
&span class=&n&&Field&/span& &span class=&n&&activityField&/span& &span class=&o&&=&/span& &span class=&n&&activityRecordClass&/span&&span class=&o&&.&/span&&span class=&na&&getDeclaredField&/span&&span class=&o&&(&/span&&span class=&s&&&activity&&/span&&span class=&o&&);&/span&
&span class=&n&&activityField&/span&&span class=&o&&.&/span&&span class=&na&&setAccessible&/span&&span class=&o&&(&/span&&span class=&kc&&true&/span&&span class=&o&&);&/span&
&span class=&n&&Activity&/span& &span class=&n&&activity&/span& &span class=&o&&=&/span& &span class=&o&&(&/span&&span class=&n&&Activity&/span&&span class=&o&&)&/span& &span class=&n&&activityField&/span&&span class=&o&&.&/span&&span class=&na&&get&/span&&span class=&o&&(&/span&&span class=&n&&activityRecord&/span&&span class=&o&&);&/span&
&span class=&k&&return&/span& &span class=&n&&activity&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span& &span class=&k&&catch&/span& &span class=&o&&(&/span&&span class=&n&&ClassNotFoundException&/span& &span class=&n&&e&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&e&/span&&span class=&o&&.&/span&&span class=&na&&printStackTrace&/span&&span class=&o&&();&/span&
&span class=&o&&}&/span& &span class=&k&&catch&/span& &span class=&o&&(&/span&&span class=&n&&NoSuchMethodException&/span& &span class=&n&&e&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&e&/span&&span class=&o&&.&/span&&span class=&na&&printStackTrace&/span&&span class=&o&&();&/span&
&span class=&o&&}&/span& &span class=&k&&catch&/span& &span class=&o&&(&/span&&span class=&n&&IllegalAccessException&/span& &span class=&n&&e&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&e&/span&&span class=&o&&.&/span&&span class=&na&&printStackTrace&/span&&span class=&o&&();&/span&
&span class=&o&&}&/span& &span class=&k&&catch&/span& &span class=&o&&(&/span&&span class=&n&&InvocationTargetException&/span& &span class=&n&&e&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&e&/span&&span class=&o&&.&/span&&span class=&na&&printStackTrace&/span&&span class=&o&&();&/span&
&span class=&o&&}&/span& &span class=&k&&catch&/span& &span class=&o&&(&/span&&span class=&n&&NoSuchFieldException&/span& &span class=&n&&e&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&e&/span&&span class=&o&&.&/span&&span class=&na&&printStackTrace&/span&&span class=&o&&();&/span&
&span class=&o&&}&/span&
&span class=&k&&return&/span& &span class=&kc&&null&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&然而这种方法并不是很推荐,主要是有以下的不足:&/p&&ul&&li&反射通常会比较慢&/li&&li&不稳定性,这个才是不推荐的原因,Android框架代码存在修改的可能性,谁要无法100%保证mActivities,paused固定不变。所以可靠性不是完全可靠。&/li&&/ul&&h2&Activity基类&/h2&&p&既然反射不是很可靠,那么有一种比较可靠的方式,就是使用Activity基类。&/p&&p&在Activity的onResume方法中,将当前的Activity实例保存到一个变量中。&br&&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kd&&class&/span& &span class=&nc&&BaseActivity&/span& &span class=&kd&&extends&/span& &span class=&n&&Activity&/span&&span class=&o&&{&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&protected&/span& &span class=&kt&&void&/span& &span class=&nf&&onResume&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&kd&&super&/span&&span class=&o&&.&/span&&span class=&na&&onResume&/span&&span class=&o&&();&/span&
&span class=&n&&MyActivityManager&/span&&span class=&o&&.&/span&&span class=&na&&getInstance&/span&&span class=&o&&().&/span&&span class=&na&&setCurrentActivity&/span&&span class=&o&&(&/span&&span class=&k&&this&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&然而,这一种方法也不仅完美,因为这种方法是基于约定的,所以必须每个Activity都继承BaseActivity,如果一旦出现没有继承BaseActivity的就可能有问题。&/p&&h2&回调方法&/h2&&p&介绍了上面两种不是尽善尽美的方法,这里实际上还是有一种更便捷的方法,那就是通过Framework提供的回调来实现。&/p&&p&Android自 API 14开始引入了一个方法,即Application的registerActivityLifecycleCallbacks方法,用来监听所有Activity的生命周期回调,比如onActivityCreated,onActivityResumed等。&/p&&p&So,一个简单的实现如下&br&&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kd&&class&/span& &span class=&nc&&MyApplication&/span& &span class=&kd&&extends&/span& &span class=&n&&Application&/span& &span class=&o&&{&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&onCreate&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&kd&&super&/span&&span class=&o&&.&/span&&span class=&na&&onCreate&/span&&span class=&o&&();&/span&
&span class=&n&&registerActivityLifecycleCallbacks&/span&&span class=&o&&(&/span&&span class=&k&&new&/span& &span class=&n&&ActivityLifecycleCallbacks&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&onActivityCreated&/span&&span class=&o&&(&/span&&span class=&n&&Activity&/span& &span class=&n&&activity&/span&&span class=&o&&,&/span& &span class=&n&&Bundle&/span& &span class=&n&&savedInstanceState&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&onActivityStarted&/span&&span class=&o&&(&/span&&span class=&n&&Activity&/span& &span class=&n&&activity&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&onActivityResumed&/span&&span class=&o&&(&/span&&span class=&n&&Activity&/span& &span class=&n&&activity&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&MyActivityManager&/span&&span class=&o&&.&/span&&span class=&na&&getInstance&/span&&span class=&o&&().&/span&&span class=&na&&setCurrentActivity&/span&&span class=&o&&(&/span&&span class=&n&&activity&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&onActivityPaused&/span&&span class=&o&&(&/span&&span class=&n&&Activity&/span& &span class=&n&&activity&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&onActivityStopped&/span&&span class=&o&&(&/span&&span class=&n&&Activity&/span& &span class=&n&&activity&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&onActivitySaveInstanceState&/span&&span class=&o&&(&/span&&span class=&n&&Activity&/span& &span class=&n&&activity&/span&&span class=&o&&,&/span& &span class=&n&&Bundle&/span& &span class=&n&&outState&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&onActivityDestroyed&/span&&span class=&o&&(&/span&&span class=&n&&Activity&/span& &span class=&n&&activity&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&o&&});&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&然而,金无足赤人无完人,这种方法唯一的遗憾就是只支持API 14即其以上。不过还在现在大多数设备都满足了这个要求。&/p&&h3&为什么是弱引用&/h3&&p&可能有人会带着疑问看到这里,MyActivityManager是个什么鬼,好,我们现在看一下这个类的实现&br&&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kd&&class&/span& &span class=&nc&&MyActivityManager&/span& &span class=&o&&{&/span&
&span class=&kd&&private&/span& &span class=&kd&&static&/span& &span class=&n&&MyActivityManager&/span& &span class=&n&&sInstance&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&MyActivityManager&/span&&span class=&o&&();&/span&
&span class=&kd&&private&/span& &span class=&n&&WeakReference&/span&&span class=&o&&&&/span&&span class=&n&&Activity&/span&&span class=&o&&&&/span& &span class=&n&&sCurrentActivityWeakRef&/span&&span class=&o&&;&/span&
&span class=&kd&&private&/span& &span class=&nf&&MyActivityManager&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kd&&static&/span& &span class=&n&&MyActivityManager&/span& &span class=&nf&&getInstance&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&k&&return&/span& &span class=&n&&sInstance&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&n&&Activity&/span& &span class=&nf&&getCurrentActivity&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&n&&Activity&/span& &span class=&n&&currentActivity&/span& &span class=&o&&=&/span& &span class=&kc&&null&/span&&span class=&o&&;&/span&
&span class=&k&&if&/span& &span class=&o&&(&/span&&span class=&n&&sCurrentActivityWeakRef&/span& &span class=&o&&!=&/span& &span class=&kc&&null&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&currentActivity&/span& &span class=&o&&=&/span& &span class=&n&&sCurrentActivityWeakRef&/span&&span class=&o&&.&/span&&span class=&na&&get&/span&&span class=&o&&();&/span&
&span class=&o&&}&/span&
&span class=&k&&return&/span& &span class=&n&&currentActivity&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&setCurrentActivity&/span&&span class=&o&&(&/span&&span class=&n&&Activity&/span& &span class=&n&&activity&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&sCurrentActivityWeakRef&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&WeakReference&/span&&span class=&o&&&&/span&&span class=&n&&Activity&/span&&span class=&o&&&(&/span&&span class=&n&&activity&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&这个类,实现了当前Activity的设置和获取。&/p&&p&那么为什么要使用弱引用持有Activity实例呢?&/p&&p&其实最主要的目的就是避免内存泄露,因为使用默认的强引用会导致Activity实例无法释放,导致内存泄露的出现。详细了解弱引用,请参考本文&a href=&http://link.zhihu.com/?target=http%3A//droidyue.com/blog//understanding-weakreference-in-java/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&译文:理解Java中的弱引用&/a&&/p&&h2&Demo源码&/h2&&ul&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/androidyue/GetCurrentActivityDemo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GetCurrentActivityDemo&/a&&/li&&/ul&&h2&知乎 Live 推荐&/h2&&p&我将要在知乎上进行我的第二场 Live,题为《我学安卓的那些套路》,来分享我学习安卓的经验与心得。覆盖的内容如下:&/p&&ul&&li&Android 需要打好哪些编程基础?&/li&&li&除了编程基础,我们还需要补充哪些能力?&/li&&li&作为 Android 程序员,如何把握好技术的宽度和深度?&/li&&li&Android 每块知识学到什么程度,怎么做到?&/li&&li&如何从日常的工作中获取最大的收益?&/li&&li&Android 那么多库,我该选择哪些,怎么学,学到什么程度?&/li&&li&对于初学者或大学生的建议有哪些?&/li&&/ul&&p&如果你想听一听我的经验或者有疑惑,欢迎参与。&/p&&p&参与地址:&a href=&https://www.zhihu.com/lives/620224& class=&internal&&&span class=&invisible&&https://www.&/span&&span class=&visible&&zhihu.com/lives/8028995&/span&&span class=&invisible&&&/span&&span class=&ellipsis&&&/span&&/a&&/p&
在Android开发过程中,我们有时候需要获取当前的Activity实例,比如弹出Dialog操作,必须要用到这个。关于如何实现由很多种思路,这其中有的简单,有的复杂,这里简单总结一下个人的一些经验吧。反射反射是我们经常会想到的方法,思路大概为1 获取ActivityT…
&p&----------------- 1/24更新:----------------------&/p&&p&评论区有问到滤波和模糊区别的,那就一步到位,说下几个容易搞混的概念:&/p&&p&&b&滤波(&/b&高通、低通、带通、带阻&b&) 、模糊、去噪、平滑等。&/b&&/p&&p&看图:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-080bf64b068da98_b.png& data-rawwidth=&557& data-rawheight=&357& class=&origin_image zh-lightbox-thumb& width=&557& data-original=&https://pic1.zhimg.com/v2-080bf64b068da98_r.png&&&/figure&&br&&p&&b&
(&/b&它们的范围大小以及相互包含关系如图所示&b&)&/b&&/p&&br&&p&滤波是对输入信号进行卷积处理的一个过程,写成一个函数的形式是这样的:
&b&滤波 = 卷积( 输入信号 ,卷积模板 )&/b& &b&卷积模板/掩膜 的不同决定了不同的滤波方式&/b&,也因此产生了高通、低通、带通、带阻等基本的滤波方式。&/p&&p&针对低通滤波,就是保留将信号中的低频部分,抑制高频部分。要达到这个目的,可以利用均值掩膜、高斯掩膜等对

我要回帖

更多关于 oppo手机有没有nfc 的文章

 

随机推荐