使用Intent在活动间穿梭(Intent不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据)
1、使用显式Intent
基于安卓入门1的内容,继续在ActivityTest项目中再创建一个活动。右击com.example.administrator.activitytest包->New->Activity->Empty Activity,会弹出一个创建活动的对话框,将活动命名为SecondActivity,并勾选Generate Layout File,给布局文件起名为second_layout,不勾选Launcher Activity选项,然后点击Finish。
Android Studio会自动生成SecondActivity.java和second_layout.xml这两个文件。在second_layout中添加一个按钮Button 2(步骤同前),SecondActivity中的代码自动生成一部分,保持默认不变。
AndroidManifest.xml已经注册过活动,打开如下:
1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.example.administrator.activitytest">
4
5 <application
6 android:allowBackup="true"
7 android:icon="@mipmap/ic_launcher"
8 android:label="@string/app_name"
9 android:supportsRtl="true"
10 android:theme="@style/AppTheme">
11 <activity android:name=".MainActivity">
12 <intent-filter>
13 <action android:name="android.intent.action.MAIN" />
14
15 <category android:name="android.intent.category.LAUNCHER" />
16 </intent-filter>
17 </activity>
18 <activity android:name=".SecondActivity"></activity> //SecondActivity不是主活动,不需要配置<intent-filter>标签里的内容
19 </application>
20
21 </manifest>
修改安卓入门1中的MainActivity中的按钮点击事件,在MainActivity这个活动的基础上打开SecondActivity这个活动,代码如下:
1 button1.setOnClickListener(new View.OnClickListener(){
2 @Override
3 public void onClick(View v){
4 Intent intent=new Intent(MainActivity.this,SecondActivity.class); //第一个参数Context要求提供一个启动活动的上下文,第二个参数Class指定想要启动的目标活动
5 startActivity(intent); //startActivity()用于启动活动
6 }
7 });
重新运行程序,在MainActivity界面点击按钮成功启动SecondActivity这个活动。
2、使用隐式Intent(并不指明我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent并找出合适的活动去启动)
AndroidManifest.xml下,在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent。
1 <activity android:name=".SecondActivity">
2 <intent-filter>
3 <action android:name="com.example.administrator.activitytest.ACTION_START"/>
4
5 <category android:name="android.intent.category.DEFAULT"/>
6 </intent-filter>
7 </activity>
修改MainActivity中按钮的点击事件,代码如下:
1 button1.setOnClickListener(new View.OnClickListener(){
2 @Override
3 public void onClick(View v){
4 Intent intent=new Intent("com.example.administrator.activitytest.ACTION_START");
5 startActivity(intent);
6 }
7 });
重新运行程序,在MainActivity界面点击按钮成功启动SecondActivity这个活动(打开自己程序内的活动)。
2.1使用隐式Intent,也可以启动其他程序的活动,比方调用系统的浏览器来打开网页。
修改MainActivity中按钮点击事件的代码,如下:
1 button1.setOnClickListener(new View.OnClickListener(){
2 @Override
3 public void onClick(View v){
4 Intent intent=new Intent(Intent.ACTION_VIEW);
5 intent.setData(Uri.parse("http://www.baidu.com")); //将网址字符串解析为Uri对象,再调用setData()方法将这个Uri对象传递进去
6 startActivity(intent);
7 }
8 });
重新运行程序,在MainActivity界面点击按钮成功启动系统浏览器。