1.Activity简介(★★)
Activity是Android
四大组件之一,它用于展示界面。Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过
setContentView(View)来显示指定控件。在一个android 应用中,一个
Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。
2.Activity之间的跳转(★★★★)
Activity之间的跳转分为2种:
(1)显式跳转:在可以引用到那个类,
并且可以引用到那个类的字节码时可以使用。一般用于自己程序的内部。显式跳转不可以跳转到其他程序的页面中。
(2)隐式跳转:可以在当前程序跳转到另一个程序的页面。隐式跳转不需要引用到那个类,但是必须得知道那个界面的动作(action)和信息(category)。
Activity之间通过Intent进行通信。Intent即意图,用于描述一个页面的信息,同时也是一个数据的载体。
案例-显式跳转:显式跳转必须知道并且能够使用要跳转的Activity的字节码,所以显式跳转一般只能用于自己程序的内部的跳转,而不能跳转到其他程序的Activity。
Tips:为了方便演示,我们创建一个新的
Android 工程《Activity 跳转》。然后创建两个Activity
类,分别为FirstActivity,和SecondActivity,并在Android
工程清单文件
中声明这两个Activity类。工程清单中添加Activity配置如下。
<activity android:name="com.itheima.activitySkip.FirstActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.itheima.activitySkip.SecondActivity"/>
添加activity到清单文件中
修改 FirstActivity 布局文件(activity_first.xml),并将该布局文件复制并修改名字为
activity_second.xml作为SecondActivity的布局文件。
1 <LinearLayout 2 xmlns:android=http://schemas.android.com/apk/res/android 3 xmlns:tools=http://schemas.android.com/tools 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical" 7 tools:context=".FirstActivity" > 8 <TextView 9 android:layout_gravity="center_horizontal" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:textColor="#ff0000" 13 android:text=" 我是第一个 Activity" /> 14 <Button 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:text=" 跳转到第二个 Activity" 18 android:onClick="skip2Second" /> 19 </LinearLayout>
activity_second.xml
2.1 显式跳转
编写FirstActivity类:
package com.itheima.activitySkip; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); } public void skip2Second(View view){ //创建一个 Intent 对象,并传递当前对象(Context 对象)和要跳转的 Activity 类字节码 Intent intent = new Intent(this, SecondActivity.class); //启动第二个 Activity startActivity(intent); } }
FirstActivity
运行上面的工程,点击按钮,发现成功跳转到了第二个 Activity页面。
2.2 隐式跳转
隐式跳转可以跳转到其他程序的
Activity,只要知道Activity的动作(action)以及信息(category)。因此,能够被隐式跳转的Activity,在清单文件中声明时必须指定动作和信息这两个属性。
(1)修改工程清单文件中SecondActivity的配置信息。
<activity android:name="com.itheima.activitySkip.SecondActivity"> <!-- 配置意图过滤器 –> <intent-filter > <!-- 在意图过滤器中设置 action 和 category,当有匹配的 action 和 category 的时候启动该 Activity。这里使用 Android 提供的默认 category 即可 –> <action android:name="com.itheima.activitySkip.SecondActivity"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
在清单文件中配置隐式意图
(2)修改在2.1章节中FirstActivity类
//创建一个 Intent 对象 Intent intent = new Intent(); //设置 Action intent.setAction("com.itheima.activitySkip.SecondActivity"); //对于 android.intent.category.DEFAULT 类型的信息为 Android 系统 默认的信息,省略也可以 intent.addCategory("android.intent.category.DEFAULT"); //启动 Activity startActivity(intent);
隐式意图的跳转意图
执行上面的代码,发现实现了Activity的跳转。
Tips:若清单文件中的Activity声明为:
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
将Activity作为程序入口的意图过滤器
则此Activity将作为程序的入口,有几个作为入口的Activity,apk文件安装的时候就会生成几个图标。
3.案例-Activity隐式跳转(★★★)
Android 系统中本身存在很多的应用程序,打开系统源码,查看
packages
文件夹下
的apps文件夹,里面存放着Android系统的这些应用程序。
若想跳转到这些应用程序中,只需打开对应应用程序的清单文件,找到其动作和信息,
采用隐式跳转即可实现。
3.1 打开浏览器界面
自己将Android
应用的源码安装在:D:\AndroidSource_GB\AndroidSource_GB 中,
打开
D:\AndroidSource_GB\AndroidSource_GB\packages\apps\Browser
目录,然后
打开AndroidManifest.xml清单文件,找到用于启动浏览器的intent-filter。
Tips:intent-filter有多个,我们选择一个适合我们即可。
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:scheme="about" /> <data android:scheme="javascript" /> </intent-filter>
启动浏览器需要添加的意图过滤器
注意:为了方便演示我们直接修改本文档2.1 章节中创建的工程,在FirstActivity的
布局文件中添加一个按钮,点击该按钮打开一个浏览器。这里给出 FirstActivity
类核心方
法的代码清单:
//跳转到浏览器界面 public void skip2Browser(View view){ //创建一个 Intent 对象 Intent intent = new Intent(); //设置 Action intent.setAction("android.intent.action.VIEW"); //设置 category intent.addCategory("android.intent.category.BROWSABLE"); //设置参数 intent.setData(Uri.parse("http://www.itheima.com")); //启动 Activity startActivity(intent); }
跳转到浏览器界面
运行上面代码,发现成功跳转到了浏览器界面,并打开了指定的网页。
3.2
打开短信发送界面
打开Android应用源码,找到
D:\AndroidSource_GB\AndroidSource_GB\packages\apps\Mms目录,打开
AndroidManifest.xml清单文件,找到intent-filter。
<intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.SENDTO" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> </intent-filter>
系统上层源码中发送短信的意图过滤器
在本文档2.1 章节中给FirstActivity布局文件添加一个按钮,并添加按钮事件。在该方法中实现核心业务逻辑。
//跳转到发送短信界面 public void skip2Mms(View view){ //创建一个 Intent 对象 Intent intent = new Intent(); //设置 Action intent.setAction("android.intent.action.VIEW"); //设置 category intent.addCategory("android.intent.category.BROWSABLE"); //设置参数 intent.setData(Uri.parse("sms:10086")); //设置短信内容 intent.putExtra("sms_body", "301"); //启动 Activity startActivity(intent); }
跳转到系统的发送短信界面