【Android API】Android 4(1)

调用这个方法类获得启动在逻辑上是当前activity的父类的Intent

shouldUpRecreateTask(Intent))

调用此方法是用来查询一个合层的回栈是否必须为了导航来创建。如果一个合成的栈需要被创建就返回true,如果该堆栈存在就返回false。

finishAffinity())

调用该方法是为了结束当前的activity和所有与当前activity有相同任务关系的所有父类activities。如果你重写了默认的行为例如onNavigateUp()),你应该在你创建一个基于向上导航合成的回栈使用该方法。

onCreateNavigateUpTaskStack)

如果你需要完全控制合成任务堆栈的创建的所有过程,就重写该方法。如果你只是想简单添加一些数据到你回栈的intent中去,你就应该重写onPrepareNavigateUpTaskStack())这个方法。

然而,大部分的应用程序都不需要使用这些APIs或者实现onPrepareNavigateUpTaskStack())方法,但是可以达这个到正确的行为仅仅通过为每一个元素添加android:parentActivityName就行了。

媒体编解码器 - Media codecs

=====================

MediaCodec类是用来为低级别的媒体编码和解码的媒体编解码器提供访问。您可以实例化一个MediaCodec类通过调用createEncoderByType())方法来进行对媒体文件进行编码或者调用[http://developer.android.com/reference/android/media/MediaCodec.html#createDecoderByTypejava.lang.String)createDecoderByType)]来对媒体文件进行解码。每一个方法都要采取一个MIME类型为你想要编码或者解码的媒体文件类型,例如“video/3gpp”或者“audio/vorbis”。(

MediaCodec实例创建之后,你可以调用android.view.Surface, android.media.MediaCrypto, int) configure()方法来指定例如媒体格式或者是否对内容加密的属性。

无论你是对你的媒体文件进行编码还是解码,在你创建MediaCodec实例后的其余进程都是一样的。首先通过getInputBuffers())的方法获得输入ByteBuffer对象的一个数组然后再通过getOutputBuffers())方法来获得一个输出的ByteBuffer的对象数组。

当你准备好进行编码或者解码的时候,调用dequeueInputBuffer())方法来获得这个用来作为媒体文件源码的ByteBuffer(从输入的buffers的数组中)的索引位置。在你使用带有媒体文件源码的ByteBuffer之后,通过调用int, int, long, int)queueInputBuffer()方法来释放缓存区的所有权。

对输出缓存区也是一样的,调用long) dequeueOutputBuffer()方法来获得你接收到结果的ByteBuffer的索引位置。在你从ByteBuffer读出输出之后,通过调用boolean)releaseOutputBuffer()方法来释放所有权。

你可以结合MediaCrypto APIs,而不是正常的int, android.media.MediaCodec.CryptoInfo, long, int) queueInputBuffer()方法,通过调用int, int, long, int)queueSecureInputBuffer()的方法来处理媒体媒体编解码器的加密数据。

想要了解更多关于如何使用编解码器的信息,参见MediaCodec文档。

自定义录音 - Record audio on cue

===========================

新方法startRecording())允许你可以在MediaSyncEvent的定义提示下的基础上开始录音。这个MediaSyncEvent指定一个当完成时就能自发触动录音机开始录音的音频对话(例如一个被MediaPlayer所定义的对话)。例如,您可以使用这个功能播放提示音来表示一段录音会话的开始,然后这个录音就自动开始,所以你没不必手动同步提示音和录音开始的操作。

定时文本轨道 - Timed text tracks

==========================

MediaPlayer这个类现在可以处理带内和带外的文本轨道。带内文本轨道就是一个MP4或3GPP的媒体源的文本轨道。带外文本轨道可以通过addTimedTextSource()这个方法来本当作一个外部的文本进行添加。在所有的外部文本轨道添加之后,调用android.net.Uri, java.lang.String)getTrackInfo()方法来对数据源中所有的可用的轨迹的列表进行刷新。

如果要用MediaPlayer这个类来设置轨道,你必须调用selectTrack())这个方法选择你想要设置的轨道的索引位置。

当得知到这个文本轨道准备开始时,实现MediaPlayer.OnTimedTextListener这个接口并且把它传到setOnTimedTextListener())方法中去。

音频效果 - Audio effects

====================

AudioEffect这个类现在支持当捕获到音频时额外的的音频预处理类型:

作为声学回声消除器(AEC)的AcousticEchoCanceler这个类消除了从远程捕捉到音频信号上的信号的作用。

作为自动增益控制(AGC)的AutomaticGainControl这个类自动恢复正常捕获的信号输出。

作为噪声抑制器的(NS)的NoiseSuppressor这个类可以消除被捕获信号的背景噪音。

您可以应用这些利用AudioEffect一个子类的AudioRecord类上的音频捕获预处理效果。

注意:并不能保证所有的设备都能支持这些效果的,所以你应该首先调用在对应音频效果类上的[http://developer.android.com/reference/android/media/audiofx/AcousticEchoCanceler.html#isAvailableisAvailable]的方法来检测它的可用性。()

无缝播放 - Gapless playback

=======================

现在您可以在两个完全独立的MediaPlayer类上执行无缝播放。在您第一个MediaPlayer类执行结束前的任何时间调用setNextMediaPlayer())这个方法,然后Android系统将会在您第一个停止的时候紧接着播放第二个文件。

媒体路由器。这个新的APIs MediaRouter,MediaRouteActionProvider和MediaRouteButton为您在播放文件的地方提供标准的机制和界面供您选择。

自动对焦动作-Auto focus movement

==========================

新增接口Camera.AutoFocusMoveCallback,允许你监听自动对焦动作。你可以使用setAutoFocusMoveCallback())注册你的接口。之后,当照相机处于持续自动对焦模式下(FOCUS_MODE_CONTINUOUS_VIDEO或者FOCUS_MODE_CONTINUOUS_PICTURE),你会收到一个android.hardware.Camera) onAutoFocusMoving()的回调。这个回调方法告诉你自动对焦是否已经开始移动或者已经停止。

相机声音 - Camera sounds

====================

MediaActionSound类提供了一个简单的API集,用于发出由相机或者其他媒体创建的声音。当拍照或者摄像的时候,你应当使用这些API播放适当的声音。

当播放声音时,只要使用一个MediaActionSound对象,调用load())预加载需要的音频,然后在适当的时间调用play())即可。

Android Beam

============

Android Beam™ 现在支持蓝牙设备上的大数据量传输。当你使用新的[http://developer.android.com/reference/android/nfc/NfcAdapter.html#setBeamPushUrisandroid.net.Uri[](, android.app.Activity) setBeamPushUris()]方法或者新的回调接口NfcAdapter.CreateBeamUrisCallback定义待传输的数据,Android会关闭蓝牙或者另一个交互传输系统的数据传输,以取得更高的传输速度。这对大数据量特别有效,比如图像和影像文件,并且不需要在设备间进行显式的配对。这不需要你的应用来做更多的工作就能够发挥蓝牙传输的优势。

[http://developer.android.com/reference/android/nfc/NfcAdapter.html#setBeamPushUrisandroid.net.Uri[](, android.app.Activity) setBeamPushUris()]方法用一个Uri对象的数组以指定在应用中想要传输的数据。另外,你也可以实现NfcAdapter.CreateBeamUrisCallback接口。这样,你就能够通过调用android.app.Activity) setBeamPushUrisCallback()方法为你的activity指定数据。

当使用这个回调接口时,用户每次使用Android Beam执行了一次共享,系统会调用接口的createBeamUris())方法以便于你能够定义需要共享的URI。对于待分享的URI会随着activity中的用户环境变化而变化的情况下,这是有用的。反之,如果待分享的URI不会改变,那么你可以安全地使用setBeamPushUris())方法提前定义它们。

网络服务发现 - Network service discovery

==================================

Android 4.1添加了基于DNS的多播服务发现的支持。通过Wi-Fi,它允许你发现并连接对应的设备提供的服务。这些设备包括可移动设备、打印机、照相机、媒体播放器和其他注册于本地网络的设备。

新的包android.net.nsd包含了新的API。它们允许你在本地网络中广播你的服务,发现设备以及连接设备。

为了注册你的服务,首先你必须创建一个NsdServiceInfo对象,并定义服务的各种属性。需要用到的方法有setServiceName()), setServiceType())和setPort())。

然后你需要实现接口NsdManager.RegistrationListener,并使用你的NsdServiceInfo把它传给registerService())。

为了发现网络中的服务,需要实现接口NsdManager.DiscoveryListener,并传给discoverServices())。

当你的NsdManager.DiscoveryListener接收到发现服务的回调时,你需要通过调用android.net.nsd.NsdManager.ResolveListener) resolveService()解析服务。调用时,传递一个NsdManager.ResolveListener的实现(这个实现接收包含已发现服务的信息的一个NsdServiceInfo)。调用这个方法允许你初始化连接。

Wi-Fi Direct服务发现

================

Wi-Fi Direct API在Android 4.1中被增强以支持在WifiP2pManager中的预先关联服务发现。这允许在连接之前使用Wi-Fi Direct通过服务发现和筛选周围的设备。与此同时,Network Service Discovery允许你在一个已存在并保持连接的网络上发现一个服务(例如一个本地的Wi-Fi网络)。

为了广播你的应用作为一个Wi-Fi上的服务,以便于其他设备能够发现并连接你的应用,需要调用addLocalService())方法并传输一个[http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.htmlWifiP2pServiceInfo]对象。这个对象描述了你的应用服务。

为了通过Wi-Fi开始发现附近的设备,首先你应当决定使用Bonjour还是Upnp实现通信。如果使用Bonjour,首先要用setDnsSdResponseListeners())设置好一些回调监听器。这个方法需要WifiP2pManager.DnsSdServiceResponseListener和[http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdTxtRecordListener.htmlWifiP2pManager.DnsSdTxtRecordListenerUpnp,则要调用[setUpnpServiceResponseListener()]( ))。这个方法需要一个[http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.UpnpServiceResponseListener.htmlWifiP2pManager.UpnpServiceResponseListener]作为参数。]两个作参数。如果使用

在你开始发现本地设备上的服务之前,你也需要调用[http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html#addServiceRequestandroid.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.nsd.WifiP2pServiceRequest,%20android.net.wifi.p2p.WifiP2pManager.ActionListener)addServiceRequest)]方法。当你传递给这个方法的接口[http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ActionListener.htmlWifiP2pManager.ActionListener]收到一个成功的回调,接着你可以通过调用[http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html#discoverServicesandroid.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.WifiP2pManager.ActionListener)discoverServices)]开始探索在本地设备上的服务。(

当本地服务被发现,你会收到一个回调,来自WifiP2pManager.DnsSdServiceResponseListener或者WifiP2pManager.UpnpServiceResponseListener,这个取决于你注册使用的是Bonjour还是Upnp。收到的回调都会包含一个WifiP2pDevice对象,代表了对应的设备。

网络的使用

=====

新的方法isActiveNetworkMetered())允许你检查设备当前是否正确连接到metered网络。在执行网络事务之前,检查这个状态,可以帮助你管理数据的使用(那可能会消耗你的用户的金钱)以及帮助你对是否立即执行事务做出更好的决定(例如当设备将要连接到Wi-Fi的时候)。

可访问性服务API

=========

在Android 4.1中,可访问性服务API被大大增强了。它允许你构建服务,该服务可以监视并回应更多输入事件,比如复杂的手势使用onGesture())、其他的输入事件通过添加AccessibilityEvent, AccessibilityNodeInfoand AccessibilityRecord类来实现.

可访问性服务可以模拟用户来执行一些操作,比如点击、滚动和通过使用performAction)和setMovementGranularities)来实现文本的滚动。performGlobalAction())也允许服务模拟其他的操作,比如返回、回到主屏幕、打开最进访问的应用列表和通知栏等。

可定制的应用导航

========

当编译一个Android应用程序时,通过找到焦点元素和输入控件来自定义导航方案,需要用到findFocus())和focusSearch())方法,设置焦点需要使用setAccessibilityFocused())方法。

更多可用的widget

===========

新的android.view.accessibility.AccessibilityNodeProvider

类利用可访问性服务允许你对复杂的自定义界面做处理,所以可以以更方便的方式呈现信息。android.view.accessibility.AccessibilityNodeProvider

类允许一个具有先进的内容的widget(比如一个日历网格)利用独立完成的布局结构去展示一个复杂语义结构。这个语义结构允许可访问性服务为在同一时刻的用户展示一个更有用的互动模型。

使用Intent进行复制和粘贴

===============

你现在可以使用setClipData()方法把一个ClipData对象关联到一个Intent上。当你使用一个Intent传输复杂content:URI到另一个应用程序时,这非常有用。例如当需要共享复杂文档时。以content:URI这种形式给出的URI也遵循Intent的标记,提供读写的访问权限,允许你在这个Intent中授予对复杂URI的访问权限。当启动一个ACTION_SEND或者ACTION_SEND_MULTIPLE的Intent,在Intent给出的URI会自动复制到ClipData,以便于接受者可以有权限访问它们。

  • 支持HTML和字符串样式*

ClipData类现在能够支持包含样式的文本(包括HTML和Android样式的字符串)。你可以调用java.lang.CharSequence, java.lang.String) newHtmlText()方法添加HTML样式本文到ClipData类。

Renderscript计算功能增加了以下特性:

  • 一个脚本支持多个核心程序

  • 支持使用通过新的API rsSample脚本计算得到的过滤采样器的分配阅读。

  • 在#pragma支持使用不同版本精度的FP。

  • 通过一个计算脚本,允许从RS对象请求附加信息。

  • 多个性能提升。

新的编译注解还可用来定义计算Renderscripts时所要求的浮点型精度。这个允许你使用NEON进行运算,如在CPU路径上的快速向量数学运算,但这个在完整的IEEE 754-2008标准中是不可能的实现的。

  • * 注解:* 实验用的Renderscript图形引擎是现在已弃用。

启动活动的动画-Activity launch animations

==================================

你现在可以使用缩放动画或你自己定义的动画来启动一个活动-Activity。指定一个你想要的动画,可以使用ActivityOptions APIs来建立一个Bundle,然后你可以把它传递给任何一个用来启动一个活动的方法,如startActivity())

ActivityOptions类为你想要展示并打开的活动的每一种类型的动画都准备了一个不同的方法。

makeScaleUpAnimation())

:创建一个动画,能够从屏幕指定的位置和指定的大小拉伸一个活动窗口。例如,当打开一个应用时,Android 4.1的主屏幕使用了这个方法。

makeThumbnailScaleUpAnimation())

:创建一个动画,能够从屏幕指定的位置和提供的缩略图拉伸一个活动窗口。例如,在Android 4.1的最近使用程序窗口中,当往回一个应用程序时使用了这个动画。

makeCustomAnimation())

:创建一个动画,由你自己的资源所定义:一个用来定义活动开启的动画,一个用来定义活动被关闭的动画。

时间动画器-Time animator

===================

新的TimeAnimator提供了一个简单的回调机制,通过TimeAnimator.TimeListener,在动画的每一帧处通知你。这个动画器没有时间,插值或是对象值设定。回调监听器为每一帧动画接受信息,包括总运行时间和从前一帧到现在的运行时间。

通知-Notifications

================

在Android 4.1中,你可以创建通知栏,使用更大的内容区域,大图标预览,多动作按钮,和可配置的优先级。

通知栏样式-Notification styles


新的方法setStyle()),允许你为你的通知设定三个新的样式,每一个都提供了一个更大的内容区域。为更大的内容区域指定一个样式,将setStyle()) 传递给以后的对象之一:

Notification.BigPictureStyle

:用作包含了一个大图标附近的通知。

Notification.BigTextStyle

:用作包含了很多文本的通知,例如一封邮件。

Notification.InboxStyle

:用作包含了一个字符串列表的通知,例如来自多封邮件的片断。

通知动作-Notification actions


现在在通知消息底部支持显示两个动作按钮,不管你的通知使用的是普通或是更大的样式。

添加一个动作按钮,调用addAction())方法。这个方法使用了两个参数,一个为图标准备的绘图资源,为按键准备的文本,和一个PendingIntent对象,定义了动作的表现。

优先级-Priorities


你现在可以使用setPriority())方法来告知系统,你的通知的重要性 影响其在列表中的顺序,来设定优先级。你可以传递在Notification类中,由PRIORITY_* 常量定义的五个不同的优先级之一。默认的是PRIORITY_DEFAULT,有两个高于和两个低于它的优先级。

高优先级通知是那些用户一般情况下想要快速回复的通知,如一条即时信息,一条文本信息,或即时事件提醒。低优先级通知为……(官网文档缺失)。

系统UI控制-Controls for system UI

=============================

Android 4.0(冰激凌三明治)添加了新的,用来控制系统UI元素可见性的标志位,如使系统栏变暗,或是使其在手机上完全消失。在Android 4.1中,添加了一些更多的标志位,允许你进一步控制系统用户界面的外观和与它们相关的活动布局,通过调用setSystemUiVisibility())方法并传递以下标志位实现:

SYSTEM_UI_FLAG_FULLSCREEN

:隐藏非关键系统UI(如状态栏)。如果你的活动使用了叠加模式的动作条(启用android:windowActionBarOverlay),然后这个标志位同样隐藏动作条,并在使用一个协同动画,同时隐藏和显示两个时也实现相同功能。

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

:当你启用SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN时,将设置你的活动布局使用相同的屏幕大小,即使系统UI元素仍然可见。虽然部分布局会被系统UI叠加,但当你经常显示和隐藏系统UI时,使用SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN将会非常有用,因为这避免了你的布局需要在每次系统UI显示和隐藏时重新调整新的布局边界。

结尾

最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

高级UI,自定义View

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

[外链图片转存中…(img-xn40WoYE-1714529426720)]

高级UI,自定义View

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

[外链图片转存中…(img-dbxAaoI5-1714529426721)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值