`
growinglin
  • 浏览: 9152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android(3)

阅读更多
多个Activity之间的相互调用:

       新建一个继承Activity的类,在功能清单AndroidManifest.xml文件中添加进上面Activity配置代码,

       打开新的Activity:startActivity(new Intent(MainActivity.this, NewActivity.class));

打开新的Activity,并传递若干个参数给它:

Intent intent = new Intent(MainActivity.this, NewActivity.class)

Bundle bundle = new Bundle();//该类用作携带数据

bundle.putString("name", "传智播客");

bundle.putInt("age", 4);

intent.putExtras(bundle);//附带上额外的数据

startActivity(intent);

在另一个Activity里面接收参数:

Bundle bundle = this.getIntent().getExtras();

String name = bundle.getString("name");

int age = bundle.getInt("age");



Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。Bundle的内部实际上是使用了HashMap<String, Object>类型的变量来存放putXxx()方法放入的值:



请求码的作用:

       使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理。



结果码的作用:

       在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,我们就要用到结果码。



Intent(意图):

       Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。

Intent可以划分成显式意图和隐式意图。

显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。

隐式意图:没有明确指定组件名的Intent为隐式意图。



对于隐式意图,Android是怎样寻找到这个最合适的组件呢?记的前面我们在定义活动时,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。

动作测试(Action test)

  一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:

• 如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。

• 另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试

类别测试(Category test)

对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举另外的类别,但它不能遗漏在这个意图中的任何类别。

原则上一个没有类别的意图对象应该总能够通过匹配测试,而不管过滤器里有什么。大部分情况下这个是对的。但有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"。(带"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"设置的过滤器是例外)

数据测试(Data test)

当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。例如,如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,而不管它们的路经;如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的URIs才可以和这个过滤器相匹配。当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。

数据测试同时比较意图对象和过滤器中指定的URI和数据类型。规则如下:

a. 一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试。

b. 一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试。这通常发生在类似于mailto:和tel:这样的URIs上:它们并不引用实际数据。

c. 一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试。

d. 一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容content:或者文件file: URI而且这个过滤器没有指定一个URI,那么它也能通过测试。换句话说,一个组件被假定为支持content:和file: 数据如果它的过滤器仅列举了一个数据类型。


Activity的生命周期:

Activity有三个状态:

当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。它就是响应用户操作的Activity。

当它失去焦点但仍然对用户可见时(如右图),它处于暂停状态。即在它之上有另外一个Activity。这个Activity也许是透明的,或者没有完全覆盖全屏,所以被暂停的Activity仍对用户可见。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但系统处于极低内存时仍然可以杀死这个Activity。

完全被另一个Activity覆盖时则处于停止状态。它仍然保留所有的状态和成员信息。然而对用户是不可见的,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个Activity。

       当Activity从一种状态转变到另一种状态时,会调用以下保护方法来通知这种变化:

void onCreate(Bundle savedInstanceState)

void onStart()

void onRestart()

void onResume()

void onPause()

void onStop()

void onDestroy()



广播接收者—BroadcastReceiver:

广播接收者(BroadcastReceiver)用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收,广播接收者和JMS中的Topic消息接收者很相似。

       除了短信到来广播Intent,Android还有很多广播Intent,如:开机启动、电池电量变化、时间已经改变等广播Intent。



服务—Service:

Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:

第一步:继承Service类

public class SMSService extends Service { }

第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:

<service android:name=".SMSService" />

服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,



音乐播放:

Android提供的MMI接口,MediaPlayer类可以让我们很容易得来播放媒体音乐:实现音乐播放的核心代码如下:

mediaPlayer.setDataSource("/sdcard/god.mp3");

mediaPlayer.prepare();//缓冲                     

mediaPlayer.start();//开始或恢复播放

mediaPlayer.pause();//暂停播放

mediaPlayer.start();//恢复播放

mediaPlayer.stop();//停止播放

mediaPlayer.release();//释放资源


分享到:
评论

相关推荐

    Android 3D滑动菜单完全解析,实现推拉门式的立体特效Demo

    在Android应用开发中,创建富有视觉吸引力和交互性的用户界面是一项关键任务。本文将深入探讨如何实现一个3D滑动菜单,即推拉门式的立体特效。这种效果可以使应用程序的用户体验更加生动,增加用户与应用的互动性。...

    精通ANDROID 3-中文版

    精通ANDROID 3 中文班 80M 好书

    Android MP3录音实现

    总的来说,实现Android MP3录音涉及的关键技术点包括:LAME库的集成与使用、MediaRecorder的配置与控制、PCM数据的处理与编码、MP3文件的写入与ID3标签的添加,以及权限管理。这是一个综合性的任务,需要对Android...

    android自定义3d画廊效果

    3. **绘图基础**:自定义3D画廊需要在onDraw()方法中进行复杂的绘图逻辑。Android的Canvas提供了基本的绘图API,如drawBitmap()、drawRect()等,开发者需要理解坐标系统和绘图流程,以绘制出正确的3D效果。 4. **...

    Android实现3D图片浏览效果示例

    本示例实现了Android 3D图片浏览效果,具体实现细节请参见博文:http://blog.csdn.net/l1028386804/article/details/48052709

    android平台中MP3转wavDemo

    这个自己写的一个android 平台下移植ffmpeg项目完成的一个小的功能。ffmpeg版本0.8.8。将MP3转码为wav格式,转换前可设置要转换的采样率,并实时更新转换的进度。运行前请在sd卡下建立一个test文件夹,将要转化的MP3...

    Android平台开发之旅(第2版).pdf

    《Android平台开发之旅(第2版)》涵盖Android 3/4的新特性,立足实际的开发案例,介绍了Android平台开发的基础概念、实用技术和应用模式。主要内容包括应用程序框架、高级界面、数据库应用、网络通信与Web开发、无线...

    Android画廊视图的3D效果

    本示例程序是一个画廊视图的一个3D效果图,有对3D的同学可以多多的学习下。...大家可以多多的学习下。 建议开发童鞋使用跨平台开发工具——统一开发环境UDE来进行...已覆盖Android、iOS、WP、Symbian、Kjava操作系统平台。

    android音乐播放器中的进度条(音量控制+进度)

    在Android平台上开发一款音乐播放器应用时,进度条是一个至关重要的元素,它通常包含两个功能:音量控制和播放进度调整。在这个专题中,我们将深入探讨如何实现这两个关键功能。 首先,音量控制是Android设备上任何...

    Android 游戏FBX文件(T54坦克模型)

    本文将深入探讨Android游戏中的FBX文件,特别是针对“T54坦克模型”的具体应用。 FBX是由Autodesk公司开发的一种数据格式,它允许游戏开发者在不同的3D建模软件(如3ds Max、Maya等)之间导入和导出模型、纹理、...

    android边下载边播放音乐,有播放进度和缓冲效果

    在Android平台上实现“边下载边播放音乐”功能是一项技术挑战,它涉及到网络数据流的处理、音频解码以及用户界面的实时更新等多个方面。本文将深入探讨如何在Android应用中构建这样一个系统,包括音乐下载、播放进度...

    android 3D立方体

    一个简单的android运行3d的小例子。http://blog.csdn.net/hmg25/article/details/6739313的源代码

    android实现三级联动菜单

    3. **事件监听与响应**: - 使用`OnPageChangeListener`监听`ViewPager`的页面切换事件。当用户滑动或点击页面时,可以触发对应级别的菜单选择事件。 - 在`Fragment`中,我们可以通过接口或者`EventBus`等方式,将...

    android基于linphone实现视频通话小结

    android基于linphone实现视频通话小结

    android播放m3u8示例

    3. 准备播放源: ```java DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, "yourApp")); HlsMediaSource mediaSource = new HlsMediaSource....

    Android高级图片滚动控件,3D版的图片轮播器Demo

    3. **动画效果**:为了实现平滑的图片切换,可以使用`ObjectAnimator`或`ValueAnimator`来创建动画。这些动画可以改变`Matrix`的值,从而改变图片的位置和角度,模拟3D翻页效果。 4. **图片加载**:为了加载网络或...

    Android 3D游戏开发(含代码和游戏实例)

    3. **矩阵运算**:在3D空间中,物体的位置、旋转和缩放通常通过矩阵运算来表达。了解矩阵乘法和变换矩阵对于理解物体的定位至关重要。 4. **动画系统**:游戏中的角色和物体往往需要动态行为,这就需要一套动画系统...

    疯狂Android讲义 第3版 光盘源代码(完整版)01-04.rar

    《疯狂Android讲义 第3版》是一本深受开发者喜爱的Android技术书籍,它全面而深入地探讨了Android应用开发的各个方面。此版本基于Google官方的集成开发环境Android Studio,这是一款强大的工具,集成了编译、调试、...

    Android实现Banner轮播效果源码程序

    在Android开发中,实现Banner轮播效果是一种常见的需求,它通常用于展示广告、推荐内容或者特色功能等。本文将深入探讨如何在Android中创建一个具备自动滚动功能的Banner视图,以此来提升用户体验。 首先,我们需要...

    Android串口通信(Android Studio)

    3. **注意事项** - **安全处理**:在操作串口时,必须处理好异常,防止程序崩溃。 - **权限问题**:在某些设备上,可能需要root权限才能访问串口,对于非root设备,可能需要通过USB OTG连接外置串口设备。 - **...

Global site tag (gtag.js) - Google Analytics