使用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界面点击按钮成功启动系统浏览器。